坚持打卡学习第五天——mysql中文文档学习三(优化查询)
explain语法(获取select相关信息)
explain tab是describe tab、show columns from tab同义词
利用explain可以知道什么时候必须为表加入索引,从而得到一个使用索引来寻找记录更快的select
-- 查看sql是否使用了索引,在前面加上EXPLAIN
EXPLAIN SELECT * FROM pet WHERE name = 'fang';
[图片上传失败...(image-3b17d0-1640050915307)]
字段 | 解释 |
---|---|
id | SELECT识别符,SELECT的查询序列号 |
select_type | 查询类型 |
table | 输出结果集的表 |
partitions | 匹配的分区 |
type | 表的连接类型 |
passible_keys | 可能使用的索引 |
key | 实际使用的索引 |
key_len | 决定使用的索引长度 |
ref | 列与索引的比较 |
rows | 显示执行查询时必须检查的行数 |
filtered | 按表条件过滤的行百分比 |
Extra | 解决查询的详细信息,执行情况的描述和说明 |
1.select_type查询类型
(1)SIMPLE:简单的SELECT(没有使用UNION或子查询)
(2)PRIMARY:最外层查询
(3)UNION:UNION中第二个或后面的SELECT语句
(4)DEPENDENT UINON:UNION中第二个或后面的SELECT语句,取决于外面的查询
(5)UNION RESUIT :UNION的结果,UNION后面所有SELECT
(6)SUBQUERY:子查询中的第一个SELECT
(7)DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询
(8)DERIVED:导出表的SELECT,FROM子句的子查询
2.type
联接类型,性能丛差到好:ALL、index、range、index_subquery、unique_subquery、index_merge、ref_or_null、 ref、eq_ref、const、system
(1)ALL:遍历全表查找匹配的行
(2)index:与ALL相同,只扫描索引树
(3)range:只检索给定范围的行,使用一个索引来选择行
(4)index_subquery:与unique_subquery类似,可以替换IN子查询
(5)unique_subquery:一个索引查找函数,可以完全替换子查询,效率更高
(6)index_merge:使用索引合并优化方法,此种情况key列包含了使用索引清单,key_len包含了使用的索引的最长的关键元素
(7)ref_or_null:如同ref,但添加了包含NULL的值的行
(8)ref:表示上述表的联接匹配条件,哪些列或常量被用于查找索引列上的值
(9)eq_ref:区别于ref,使用唯一索引(PRIMARY KAY或UNIQUE)
(10)const:表最多有一个匹配行,在开始查询时被读取
(11)system:表仅有一行
。。。。。。
总结
这知识不太友好,后面回看吧。。。