最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

MySQL条件优化一例

来源:动视网 责编:小采 时间:2020-11-09 12:52:18
文档

MySQL条件优化一例

MySQL条件优化一例:MySQL条件优化一例,不是任何情况下HAVING条件都可以并入WHERE条件,只有在SQL语句中不存在GROUPBY条件或聚集函数的情况下,才能 有朋友试验如下,并提出问题: 把having条件并入where条件优点:便于统一、集中化解条件子句,节约多次化解时间。注意:不是任
推荐度:
导读MySQL条件优化一例:MySQL条件优化一例,不是任何情况下HAVING条件都可以并入WHERE条件,只有在SQL语句中不存在GROUPBY条件或聚集函数的情况下,才能 有朋友试验如下,并提出问题: 把having条件并入where条件优点:便于统一、集中化解条件子句,节约多次化解时间。注意:不是任


MySQL条件优化一例,不是任何情况下HAVING条件都可以并入WHERE条件,只有在SQL语句中不存在GROUPBY条件或聚集函数的情况下,才能

有朋友试验如下,并提出问题:

把having条件并入where条件
优点:
便于统一、集中化解条件子句,节约多次化解时间。
注意:
不是任何情况下HAVING条件都可以并入WHERE条件,只有在SQL语句中不存在GROUPBY条件或聚集函数的情况下,才能将HAVING条件与WHERE条件的进行合并。

mysql> explain extended select id,genre from movies where id>10 having genre>1000;
+----+-------------+--------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+--------+------+---------------+------+---------+------+--------+----------+-------------+
| 1 | SIMPLE | movies | ALL | PRIMARY | NULL | NULL | NULL | 107230 | 100.00 | Using where |
+----+-------------+--------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
mysql> show warnings\G;
*************************** 1. row ***************************
Level: Note
Code: 1003
Message: /* select#1 */ select `Portal_19`.`movies`.`id` AS `id`,`Portal_19`.`movies`.`genre` AS `genre` from `Portal_19`.`movies` where (`Portal_19`.`movies`.`id` > 10) having (`Portal_19`.`movies`.`genre` > 1000)
1 row in set (0.00 sec)
mysql> explain extended select id,genre from movies where id>10 and genre>1000;
+----+-------------+--------+------+---------------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+--------+------+---------------------+------+---------+------+--------+----------+-------------+
| 1 | SIMPLE | movies | ALL | PRIMARY,genre_index | NULL | NULL | NULL | 107230 | 67.72 | Using where |
+----+-------------+--------+------+---------------------+------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
mysql> show warnings\G;
*************************** 1. row ***************************
Level: Note
Code: 1003
Message: /* select#1 */ select `Portal_19`.`movies`.`id` AS `id`,`Portal_19`.`movies`.`genre` AS `genre` from `Portal_19`.`movies` where ((`Portal_19`.`movies`.`id` > 10) and (`Portal_19`.`movies`.`genre` > 1000))
1 row in set (0.00 sec)
二者的执行顺序都是一样的,但优化后filtered值and小于having。
mysql> select id,genre from movies where id>10 having genre>1000;
......
72187 rows in set (0.36 sec)
mysql> select id,genre from movies where id>10 and genre>1000;
......
72187 rows in set (0.37 sec)
优化后的执行时间比没优化时的执行时间还长0.01s。why?(mysql不支持把having条件并入where条件中去)
---
---答复:
---1 这个时间,并不一定能够作为“精准比较”的依据
---2 “精准比较”的方式,至少是多次求均值
---3 方法1:比较从打开表到获取数据全部过程的均值:循环,,每次都执行“flush table movies” ,然后累计每次查询的时间,之后求求均值
---4 方法2:去掉打开表等过程,只求获取数据的过程均值:先执行一次查询,时间不计。然后循环累计每次查询的时间,之后求求均值
---5 方法3:方法1和方法2可以合并。求“单次打开表+多次查询语句循环的时间=总时间”,然后求均值
---6 本质上,优化前后,都是全表扫描,所以不会有差异。但filtered值不同,这应该是个bug。

--------------------------------------分割线 --------------------------------------

Ubuntu 14.04下安装MySQL

《MySQL权威指南(原书第2版)》清晰中文扫描版 PDF

Ubuntu 14.04 LTS 安装 LNMP Nginx\PHP5 (PHP-FPM)\MySQL

Ubuntu 14.04下搭建MySQL主从服务器

Ubuntu 12.04 LTS 构建高可用分布式 MySQL 集群

Ubuntu 12.04下源代码安装MySQL5.6以及Python-MySQLdb

MySQL-5.5.38通用二进制安装

--------------------------------------分割线 --------------------------------------

本文永久更新链接地址:

文档

MySQL条件优化一例

MySQL条件优化一例:MySQL条件优化一例,不是任何情况下HAVING条件都可以并入WHERE条件,只有在SQL语句中不存在GROUPBY条件或聚集函数的情况下,才能 有朋友试验如下,并提出问题: 把having条件并入where条件优点:便于统一、集中化解条件子句,节约多次化解时间。注意:不是任
推荐度:
标签: 数据库 mysql 优化
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top