该部分讨论where子句的优化,不仅select之中,相同的优化同样试用与delete 和update语句中的where子句;

1: 移去不必要的括号:

 ((a AND b) AND c OR (((a AND b) AND (c AND d))))
-> (a AND b AND c) OR (a AND b AND c AND d) 

2:常量合并:

 (a<b AND b=c) AND a=5
-> b>5 AND b=c AND a=5

3:常量条件去除:

  (B>=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6)
-> B=5 OR B=6

4:indexes 常量表达式只被计算一次:

5:没有where 条件的 单表 Count(*)直接检索Information_schema库中的统计信息(对 myisam 和 memory表)。

6:更早的察觉无效的常量表达式。mysql快速发现select语句中不可能成立的where条件并且返回no rows;

7: 如果没有使用group by 或者聚合函数(count(),min().max()),having子句会被合并到where 子句中;

8:做链接的每个table,一个快速的where子句构造原则是尽可能的跳过更多的行;

9:查询中,所有 constant table 都在其他表之前读取,constant table 定义如下:

1.1 : 一个空表或者只有一行数据的表;

1.2:   一个以主键 或唯一索引为 where条件子句的表,并且所有的Index部分都是和常量表达式比较,不为null(unique index 可能包含多个null);

SELECT * FROM t WHERE primary_key=1;
SELECT * FROM t1,t2WHERE t1.primary_key=1 AND t2.primary_key=t1.id;

10: 通过尝试所有可能性,找到最好的表join组合情况,如果order by子句和group by 子句中的所有列都来至同一张表,那么该表在join时优先read;

11:如果order by子句和 group by子句不同,或者order by Or group by 包含不在查询队列第一张表的中的列,那么会创建 temporary table;

12: 优化器如果认为使用index 会比表scan 更高效,则会选择使用index,scan表会被使用,如果最好的index需要scan多于30%的表记录,但是一个固定的比例不会确定使用table scan或者走index,优化器更加复杂,根据在额外的因数,eg:表的大小,行数,block快的大小;

13: 有些情况下,mysql 可以读取Index 数据而不必回访data file(base table)(索引覆盖);

下面的快速例子:

SELECT COUNT(*) FROM tbl_name;SELECT MIN(key_part1),MAX(key_part1) FROM tbl_name;SELECT MAX(key_part2) FROM tbl_nameWHERE key_part1=constant;SELECT ... FROM tbl_nameORDER BY key_part1,key_part2,... LIMIT 10;
SELECT ... FROM tbl_nameORDER BY key_part1 DESC, key_part2 DESC, ... LIMIT 10;

以下是mysql只查询 index B-Tree,假设index 列值为数值型:
SELECT key_part1,key_part2 FROM tbl_name WHERE key_part1=val;SELECT COUNT(*) FROM tbl_nameWHERE key_part1=val1 AND key_part2=val2;SELECT key_part2 FROM tbl_name GROUP BY key_part1;

以下是用index来避免Filesort

SELECT ... FROM tbl_nameORDER BY key_part1,key_part2,... ;SELECT ... FROM tbl_nameORDER BY key_part1 DESC, key_part2 DESC, ... ;

转载于:https://www.cnblogs.com/onlysun/p/4516756.html

MYsql优化where子句相关推荐

  1. 8.2.1.2 How MySQL Optimizes WHERE Clauses MySQL 优化WHERE 子句

    8.2.1.2 How MySQL Optimizes WHERE Clauses MySQL 优化WHERE 子句本节讨论优化用于处理WHERE子句, 例子是使用SELECT 语句,但是相同的优化应 ...

  2. MySQL 优化 —— WHERE 子句优化

    引言 本文翻译自 MySQL 官网:WHERE Clause Optimization WHERE 子句优化 这一部分我们来讨论对 WHERE 子句的优化处理.本部分的案例都是以 SELECT 语句为 ...

  3. MySQL优化—工欲善其事,必先利其器之EXPLAIN

    mysql explain命令是查询性能优化不可缺少的一部分. explain output columns 列名 说明 id 执行编号,标识select所属的行.如果在语句中没有子查询或者关联查询, ...

  4. 项目中常用的19条MySQL优化

    声明一下:下面的优化方案都是基于 " Mysql-索引-BTree类型 " 的 一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单 ...

  5. MySQL优化系列(二)--查找优化(1)(非索引设计)

    MySQL优化系列(二)--查找优化(1)(非索引设计) 接下来这篇是查询优化,用户80%的操作基本都在查询,我们有什么理由不去优化他呢??所以这篇博客将会讲解大量的查询优化(索引以及库表结构优化等高 ...

  6. 项目中常用的 19 条 MySQL 优化总结

    作者:zhangqh 地址:segmentfault.com/a/1190000012155267 本文总结了19条关于Mysql的优化方案,本文的优化方案都是基于 " Mysql-索引-B ...

  7. mysql优化篇_MySQL优化篇-查询优化

    可以参考一下官方文档中的解释. 7. 优化 7.1. 优化概述 7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. ...

  8. mysql 优化表 3000万_mysql优化:专题三、关于单表查询,可以这么优化

    mysql优化:专题三.关于单表查询,可以这么优化 作者:PHPYuan 时间:2018-10-18 03:41:26 上篇讲解了「mysql优化专题」90%程序员都会忽略的增删改优化(2),相信大家 ...

  9. WEB程序员需要掌握的十大MySQL优化技巧

    WEB开发者不光要解决程序的效率问题,对数据库的快速访问和相应也是一个大问题.希望本文能对大家掌握MySQL优化技巧有所帮助. 1.优化你的MySQL查询缓存 在MySQL服务器上进行查询,可以启用高 ...

最新文章

  1. LeetCode刷题记录13——705. Design HashSet(easy)
  2. python使用imbalanced-learn的SMOTEN方法进行上采样处理数据不平衡问题
  3. 设计模式03------单例模式
  4. 二 Java开发环境搭建
  5. freebsd java 能用吗_在FreeBSD 4.9下安装JAVA环境
  6. 汲取Linux灵感 Pivotal开源大数据套件
  7. java 中random类使用_Python中random的使用方法
  8. coreos安装php,window_win10系统运行wps无响应的解决方案,wps是我们在日常办公中经常会 - phpStudy...
  9. PHP 对象 多态性
  10. [.NET开发] NPOI导出
  11. Mac M1芯片安装打开Axure9
  12. C语言中期报告模板,学院毕业设计(论文)中期报告模板
  13. github下载慢的两种解决方式
  14. ckeditor引入
  15. WRF主程序与WPS的编译与安装
  16. 如何在微信中(微信公众号页面)给Vue单页应用设置标题
  17. 乐理知识(和弦相关)
  18. 数学与计算机科学奖视频马化腾,首届未来科学大奖揭晓 马化腾李彦宏都来颁奖了...
  19. Myricetin/Myricitrin 杨梅素/杨梅苷98%,杨梅提取物
  20. Autodesk AutoCAD Mac版卸载教程

热门文章

  1. c++ -- 构造函数与析构函数
  2. 用ul和li实现表格table效果 (转)
  3. python update()
  4. hdu 6148 数位dp
  5. hdu4756 最小树+树形dp
  6. 操作系统原理第五章:CPU调度
  7. 【Groovy】自定义 Xml 生成器 BuilderSupport ( setParent 方法中设置父节点与子节点关系 )
  8. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Category 注解进行方法注入 | 分类注入方法查找优先级 )
  9. 【Groovy】map 集合 ( 根据 Key 获取 map 集合中对应的值 | map.Key 方式 | map.‘Key’ 方式 | map[‘Key’] 方式 | 代码示例 )
  10. 【计算机网络】网络安全 : 防火墙 ( 简介 | 防火墙功能 | 防火墙分类 | 分组过滤路由器 | 应用网关 )