explain分析SQL语句
- 影响服务器性能的几个方面
- 服务器硬件
- 服务器的操作系统
- 数据库存储引擎的选择
- 数据库参数配置
- 数据库结构设计和sql语句
- SQL性能下降的原因
- 查询语句写不好
- 索引失效
- 关联查询太多join
- 服务器调优和各个参数配置
- explain是什么?
- 使用explain关键字可以模拟优化器执行SQL查询语句从而知道mysql是如何处理你的SQL语句的
- explain能干嘛?
- 表的读取顺序
- 数据读操作的操作类型
- 哪些索引可以被使用
- 哪些索引被实际使用
- 表之间的引用
- 每张表有多少行被优化器查询
- SQL加载顺序
- 手写SQL和机读的sql顺序是不一样的
- explain SQL语句;
- 字段解释
- id
(select查询的顺序号)- id相同,执行由上至下
- id不同,如果是子查询,id的序号会递增,id值越大越优先级越高,越先被执行
- select_type
(数据读取操作的操作类型) - table
(表) - partitios
(分区5.5版本后) - type
(字段访问类型)- system>const>eq_ref>ref>range>index>all
- possible_keys
(可能用到索引) - key
(实际用到索引) - key_len
(索引长度) - ref
(索引的哪一列被使用到) - rows
(估算查询所需使用行数) - extra
(额外信息)- using filesort
(mysql对数据使用一个外部索引排序,而不是按照表内索引顺序进行读取,mysql中无法使用索引完成的排序操作称为文件排序) - using temporary
(mysql在对查询结果排序时使用了临时表) - 出现上面2个中的一个就需要进行优化
- using filesort
- id
索引优化
- 索引的分类
- 主键索引
- 普通索引
- 唯一索引
- 复合索引
- 全文索引
- 从普通索引查出主键索引,然后查询出数据的过程叫回表,如果一个索引包含了需要查询的字段,那么我们就叫做覆盖索引,我们通过覆盖索引来避免回表,
- 口诀
- 全值匹配我最爱,最左前缀要遵守
- 带头大哥不能死,中间兄弟不能断
- 索引列上少计算,范围之后全失效
- like百分写最右,覆盖索引不写星
- 不等空值还有or,索引失效要少用
- vachar引号不可丢,SQL高级也不难