MYsql优化where子句
该部分讨论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 ... FROMtbl_name
ORDER BYkey_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子句相关推荐
- 8.2.1.2 How MySQL Optimizes WHERE Clauses MySQL 优化WHERE 子句
8.2.1.2 How MySQL Optimizes WHERE Clauses MySQL 优化WHERE 子句本节讨论优化用于处理WHERE子句, 例子是使用SELECT 语句,但是相同的优化应 ...
- MySQL 优化 —— WHERE 子句优化
引言 本文翻译自 MySQL 官网:WHERE Clause Optimization WHERE 子句优化 这一部分我们来讨论对 WHERE 子句的优化处理.本部分的案例都是以 SELECT 语句为 ...
- MySQL优化—工欲善其事,必先利其器之EXPLAIN
mysql explain命令是查询性能优化不可缺少的一部分. explain output columns 列名 说明 id 执行编号,标识select所属的行.如果在语句中没有子查询或者关联查询, ...
- 项目中常用的19条MySQL优化
声明一下:下面的优化方案都是基于 " Mysql-索引-BTree类型 " 的 一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单 ...
- MySQL优化系列(二)--查找优化(1)(非索引设计)
MySQL优化系列(二)--查找优化(1)(非索引设计) 接下来这篇是查询优化,用户80%的操作基本都在查询,我们有什么理由不去优化他呢??所以这篇博客将会讲解大量的查询优化(索引以及库表结构优化等高 ...
- 项目中常用的 19 条 MySQL 优化总结
作者:zhangqh 地址:segmentfault.com/a/1190000012155267 本文总结了19条关于Mysql的优化方案,本文的优化方案都是基于 " Mysql-索引-B ...
- mysql优化篇_MySQL优化篇-查询优化
可以参考一下官方文档中的解释. 7. 优化 7.1. 优化概述 7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. ...
- mysql 优化表 3000万_mysql优化:专题三、关于单表查询,可以这么优化
mysql优化:专题三.关于单表查询,可以这么优化 作者:PHPYuan 时间:2018-10-18 03:41:26 上篇讲解了「mysql优化专题」90%程序员都会忽略的增删改优化(2),相信大家 ...
- WEB程序员需要掌握的十大MySQL优化技巧
WEB开发者不光要解决程序的效率问题,对数据库的快速访问和相应也是一个大问题.希望本文能对大家掌握MySQL优化技巧有所帮助. 1.优化你的MySQL查询缓存 在MySQL服务器上进行查询,可以启用高 ...
最新文章
- Android--GridView实现动态文字排版
- skyline TerraBuilder 制作MPT方法与技巧(2)(转自)
- mysql无法连接server 2008_SQL Server 2008登录错误:无法连接到(local)解决方法
- 庖丁解牛ASP.NET3.5控件和组件开发技术-(1)服务器控件概述
- 推荐算法概述(01)
- BugkuCTF-MISC题简单套娃
- 脉冲神经网络基础知识,SpikeProp
- 用CSS使DIV水平居中
- 金属热处理行业调研报告 - 市场现状分析与发展前景预测
- jsp 设置404页面
- Centos7.4 安装Docker CE版
- 威纶通触摸屏直接与台达变频器进行MODBUS RTU通信的具体方法(图文)
- 银行开发专业术语解释和银行系统开发架构的设计思想
- DCOM配置出错: 不小心删除DCOM配置中,“我的电脑”属性的Everyone权限导致......
- 坚持技术长征,阿里云要定义下一代的云
- 2021-2027全球与中国硬质PVC医药泡罩包装市场现状及未来发展趋势
- Linux C 指针
- 五种常见启发式算法求解TSP问题-总结篇
- 2021年电赛E题解析数字模拟信号混合传输收发机(详细介绍)
- 给您支招,万网域名一元购,不再是梦