mysql 执行计划type类型及sql优化原则介绍
来源:互联网 发布:国外买淘宝 编辑:程序博客网 时间:2024/05/20 05:57
type:
连接类型
system 表只有一行
const 表最多只有一行匹配,通用用于主键或者唯一索引比较时。如将主键置于where列表中,MySQL就能将该查询转换为一个常量
eq_ref 每次与之前的表合并行都只在该表读取一行,这是除了system,const之外最好的一种,特点是使用=,而且索引的所有部分都参与join且索引是主键或非空唯一键的索引
ref 如果每次只匹配少数行,那就是比较好的一种,使用=或<=>,可以是左覆盖索引或非主键或非唯一键
fulltext 全文搜索
ref_or_null 与ref类似,但包括NULL
index_merge 表示出现了索引合并优化(包括交集,并集以及交集之间的并集),但不包括跨表和全文索引。 这个比较复杂,目前的理解是合并单表的范围索引扫描(如果成本估算比普通的range要更优的话)
unique_subquery 在in子查询中,就是value in (select...)把形如“select unique_key_column”的子查询替换。PS:所以不一定in子句中使用子查询就是低效的!
index_subquery 同上,但把形如”select non_unique_key_column“的子查询替换
range 常数值的范围(索引范围扫描),对索引的扫描开始于某一点,返回匹配值域的行,常见于between、<、>等的查询
index a.当查询是索引覆盖的,即所有数据均可从索引树获取的时候(Extra中有UsingIndex);
b.以索引顺序从索引中查找数据行的全表扫描(无 UsingIndex);
c.如果Extra中Using Index与Using Where同时出现的话,则是利用索引查找键值的意思;
d.如单独出现,则是用读索引来代替读行,但不用于查找
all 遍历全表以找到匹配的行
连接类型
system 表只有一行
const 表最多只有一行匹配,通用用于主键或者唯一索引比较时。如将主键置于where列表中,MySQL就能将该查询转换为一个常量
eq_ref 每次与之前的表合并行都只在该表读取一行,这是除了system,const之外最好的一种,特点是使用=,而且索引的所有部分都参与join且索引是主键或非空唯一键的索引
ref 如果每次只匹配少数行,那就是比较好的一种,使用=或<=>,可以是左覆盖索引或非主键或非唯一键
fulltext 全文搜索
ref_or_null 与ref类似,但包括NULL
index_merge 表示出现了索引合并优化(包括交集,并集以及交集之间的并集),但不包括跨表和全文索引。 这个比较复杂,目前的理解是合并单表的范围索引扫描(如果成本估算比普通的range要更优的话)
unique_subquery 在in子查询中,就是value in (select...)把形如“select unique_key_column”的子查询替换。PS:所以不一定in子句中使用子查询就是低效的!
index_subquery 同上,但把形如”select non_unique_key_column“的子查询替换
range 常数值的范围(索引范围扫描),对索引的扫描开始于某一点,返回匹配值域的行,常见于between、<、>等的查询
index a.当查询是索引覆盖的,即所有数据均可从索引树获取的时候(Extra中有UsingIndex);
b.以索引顺序从索引中查找数据行的全表扫描(无 UsingIndex);
c.如果Extra中Using Index与Using Where同时出现的话,则是利用索引查找键值的意思;
d.如单独出现,则是用读索引来代替读行,但不用于查找
all 遍历全表以找到匹配的行
null:MySQL在优化过程中分解语句,执行时甚至不用访问表或索引
结果值从好到坏依次是:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
sql优化原则:
禁用select *使用select count(*) 统计行数尽量少运算尽量避免全表扫描,如果可以,在过滤列建立索引尽量避免在where子句对字段进行null判断尽量避免在where子句使用!= 或者<>尽量避免在where子句使用or连接尽量避免对字段进行表达式计算尽量避免对字段进行函数操作尽量避免使用不是复合索引的前缀列进行过滤连接尽量少排序,如果可以,建立索引尽量少join尽量用join代替子查询尽量避免在where子句中使用in,not in或者having,使用exists,not exists代替尽量避免两端模糊匹配 like %***%尽量用union all代替union尽量早过滤避免类型转换尽量批量insert优先优化高并发sql,而不是频率低的大sql尽可能对每一条sql进行explain尽可能从全局出发
转载:http://blog.csdn.net/leshami/article/details/49447543
阅读全文
1 0
- mysql 执行计划type类型及sql优化原则介绍
- Mysql SQL优化&执行计划
- Mysql SQL优化&执行计划
- Mysql SQL优化&执行计划
- Mysql SQL优化&执行计划
- mysql中的SQL优化与执行计划
- mysql中的SQL优化与执行计划
- MySQL SQL优化之 执行计划 explain
- Sql优化-执行计划
- MySQL执行计划介绍
- mysql执行计划介绍
- 初探Sql Server 执行计划及Sql查询优化
- 初探Sql Server 执行计划及Sql查询优化
- Sql Server 执行计划及Sql查询优化
- Sql Server 执行计划及Sql查询优化
- 初探Sql Server 执行计划及Sql查询优化
- Sql Server 执行计划及Sql查询优化
- 引用:初探Sql Server 执行计划及Sql查询优化
- python3.5+pymssql+pyinstaller 编译exe 出错问题
- 安卓银行卡输入框实现自动加空格
- C++数据结构与算法——麻将胡牌算法(一:单花色胡牌)
- 如何去掉SugarCRM系统管理界面的广告
- 小程序开发踩坑—button组件
- mysql 执行计划type类型及sql优化原则介绍
- 一名前端Web架构师的成长之路
- js常用属性
- Javascript基础学习(四)之iterable遍历
- js各种数据验证的方式
- poj3182(bfs)
- Eclipse(64位)安装SVN插件Subclipse实践
- Android Framework层的Service死锁问题分析
- 1.程序设计原则以及模式分类