MySQL explain执行计划优化
来源:互联网 发布:财务开票软件安装 编辑:程序博客网 时间:2024/05/23 01:24
MySQL explain执行计划优化
简介MySQL调优:
- 先发现问题(慢查询,explain, profile)
- 对于使用索引和没有使用索引,了解到索引可以快速去查找数据
- 了解什么是索引(索引是排好序的快速查找的数据结构)
- 索引的管理(查看,创建,删除)
- 索引的本身的数据结构(B-TREE结构和聚簇结构)
- MySQL是如何去使用这些索引的(explain工具),需要去发现索引是否合理的被使用,防止索引滥用。
注意:索引对查询是有帮助的,但是对更新是没有好处的。索引要建立的合理。
MySQL调优的一个通用思路(面试题):通过上面的步骤就可以对MySQL进行调优,只要将上面的步骤重复不断执行,可以使用MySQL在最优的情况下工作。
profile定义:MySQL提供的一个可以分析SQL语句执行过程的工具,通过它大致可以了解到MySQL将如何执行用户传递过来的sql语句。
用法
使用的时候只要在对应的sql语句前面,加上关键字explain 或者同义词 desc
# desc select * from tableName where id = 1000000;
# explain select * from tableName where id = 1000000;
以上两条sql执行效果是等价的。
可以先简单对比 有索引 和 无索引 执行计划:
no_index无索引的情况下分析:
rows: 代表查询满足该sql语句的结果,可能需要查询行的数量。
id存在主键索引的情况下分析:
type:重点分析
- all 代表全表扫描,一般在不使用索引的情况下回出现该值
全表扫描:一行一行的逐行比较,然后返回满足条件的记录。
- const,代表使用了主键索引。 开发之中,尽量出现这个。常量查找
3. range代表范围操作,当执行的sql语句是一个范围查找的时候,也可以使用索引。
range含义解释:由于索引是排好序的结构。沿着这个有序的结构,再去截取一段有序的数据,是可以利用上索引的。
面试题:什么样的字段适合建立索引?(建立索引的时候有什么考虑?)
答:(1)在where条件后面作为查询的字段需要建立索引。(2)在(排序order ,范围range ,分组group)这些情况下也是可以使用索引的,所以在排序字段后面加上索引也是可以的。
注意:在where条件后也不是所有的字段都建立索引,因为索引本身也是有开销的。
- index代表使用了索引
当做记录统计的时候,可以直接使用索引返回记录的行数,就没必要去对磁盘文件的行数做统计。
- system,当表中的记录只有一行的时候,MySQL认为可以直接的返回记录信息,而不必要使用索引文件。一般出现在一行记录(自己建立的表)或者系统级别的表(mysql.user)一般MySQL在启动的时候,会将部分的系统级别的表优先载入到内存做一个缓存。
- null,可能出现,如果出现这个,也代表很好。基本不容易出现。
总结:null 》system》const》range》index》all
注意:尽量不要出现all
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-04/129965.htm
- MySQL explain执行计划优化
- MySQL SQL优化之 执行计划 explain
- Mysql 优化之 Explain 执行计划
- Mysql 优化之 Explain 执行计划
- explain mysql 执行计划
- mysql explain执行计划
- mysql EXPLAIN--执行计划
- MYSQL执行计划Explain
- mysql explain执行计划
- MYSQL执行计划explain
- Mysql explain 执行计划
- MySQL explain执行计划
- mysql优化(二)执行计划解读Explain语法
- mysql数据库优化方案之explain执行计划
- Mysql查看执行计划-explain
- Mysql的执行计划explain
- [MySQL] explain执行计划解读
- MySQL explain执行计划解读
- adb连接机顶盒
- 取得所有点列表中的最大值GetMaxPoint
- POJ 2379 ACM Rank Table(水~)
- P2522 [HAOI2011]Problem b 莫比乌斯反演+除法优化
- Java虚拟机详解-JVM常见问题总结
- MySQL explain执行计划优化
- 几种常用的加密方式简单介绍
- Android中图像之-平滑滤镜算法
- log4j输出日志到指定文件并定时备份
- oracle 递归查询 CONNECT BY、START WITH、CONNECT_BY_ROOT、CONNECT_BY_ISLEAF、SYS_CONNECT_BY_PATH
- 引用类型(二)
- ios-出现 reference to "point" is ambiguous
- RocketMQ原理解析-broker 1. broker的启动
- Python collections模块Counter类深入分析