select customer_id,title,content from `product_comment` where audit_status=1 and product_id=100 limit 0,5;
目前可以对select update insert replace delete 进行分析
可以从explain知道
– sql如何使用索引
– 联接查询的执行顺序
– 查询扫描的数据行数
例如:
id:1
select_type:simple
table: product_comment
partitions: null
type: all
possible_keys: null
key: null
key_len:null
ref:null
rows:9494
filtered:1.00
extra:using where
id列中的数据为一组数字,表示执行select语句的顺序
id值相同时,执行顺序由上至下
id值越大优先级越高,越先被执行
| 值 | 含义 |
|---|---|
| SIMPLE | 不包含子查询或是UNION操作的查询 |
| primary | 查询中如果包含任何子查询,那么最外层的查询则被标记为primary |
| subquery | select 列表中的子查询 |
| dependent subquery | 依赖外部结果的子查询 |
输出数据行所在的表的名称
对于分区表,显示查询的分区id
对于非分区表,显示为null
| 性能 | 值 | 含义 |
|---|---|---|
| 高 | system | 这是const连接类型的一个特例,当查询的表只有一行时使用 |
| const | 表中有且只有一个匹配的行时使用,如对主键或是唯一索引的查询,这是效率最高的连接方式 | |
| eq_ref | 唯一索引或者主键索引查找,对于每个索引键,表中只有一条记录与之匹配。 | |
| ref | 非唯一索引查找,返回匹配某个单独值所有行。 | |
| ref_or_null | 类型于ref类型的查询,但是附加了对null值列的查询 | |
| index_merge | 该连接类型表示使用了索引合并优化方法。 | |
| range | 索引范围扫描,常见于between,> , <这样的查询条件 | |
| index | FUll index scan全索引扫描,同all的区别是,遍历的是索引树 | |
| 低 | all | full table scan 全表扫描, 效率最差 |
| 值 | 含义 |
|---|---|
| distanct | 优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作 |
| not exists | 使用not exists来优化查询 |
| using filesort | 使用额外操作进行排序,通常会出现在 order by 或group by 查询中 |
| using index | 使用了覆盖索引进行查询 |
| using temporary | MySQL需要使用临时表来处理查询,常见于排序,子查询和分组查询 |
| using where | 需要在MySQL服务器层使用where 条件来过滤数据。 |
| select tables optimized away | 直接通过索引来获得数据,不用访问表 |
指出MySQL能使用哪些索引来优化查询,不一定会被使用。
查询优化器 优化查询实际所使用的索引,如果没有可用的索引,则显示为null
表示索引字段的最大可能长度,key_len的长度由字段定义计算而来,并非数据的实际长度。
表示那些列或常量被用于查找索引列上的值
表示MySQL通过索引统计信息,估算的所需读取的行数,rows的大小是个统计抽样结果,并不十分准确。
表示返回结果的行数占需读取行数的百分比,Filtered列的值越大越好,Filtered列的值依赖于统计信息。
无法展示存储过程,触发器,UDF对查询的影响。