ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
执行计划,简单的来说,是SQL在数据库中执行时的表现情况,通常用于SQL性能分析,优化等场景。 在MySQL使用 explain 关键字来查看SQL的执行计划。如下所示: ~~~ //1. 查询cmf_users select * from cmf_users where name="tsingxu"; //2. 查看上述语句的执行计划 explain select * from cmf_users where name="tsingxu"; ~~~ ![](https://box.kancloud.cn/918fdd0212c326fb7462ddeedb134ef4_640x41.jpg) * id 表示查询中select操作表的顺序,按顺序从大到小依次执行 * select_type 该表示选择的类型,可选值有: SIMPLE(简单的), * table 表示该语句查询的表 * type 该属性表示访问类型 最常见包括以下几种: ALL(全表扫描) index(索引扫描) range(范围扫描) ref (非唯一索引扫描) eq_ref(唯一索引扫描) const(常数引用) 访问速度依次由慢到快。其中 : range(范围)常见与 between and …这种情况 提示 : 慢SQL是否走索引,走了什么索引,也就可以通过该属性查看了 * possible_keys 该查询语句,可能走的索引,(如某些字段上索引的名字) 这里提供的只是参考,而不是实际走的索引,也就导致会有possible_Keys不为null,key为空的现象 * key 显示MySQL实际使用的索引,其中就包括主键索引(PRIMARY),或者自建索引的名字 * key_len 表示索引所使用的字节数 * ref 连接匹配条件,如果走主键索引的话,该值为: const, 全表扫描的话,为null值 * rows 扫描行数,也就是说,需要扫描多少行,采能获取目标行数,一般情况下会大于返回行数。 通常情况下,rows越小,效率越高, 也就有大部分SQL优化,都是在减少这个值的大小。 注意: 理想情况下扫描的行数与实际返回行数理论上是一致的,但这种情况及其少,如关联查询,扫描的行数就会比返回行数大大增加) * extra 这个属性非常重要,该属性中包括执行SQL时的真实情况信息 常用的有: "using temporary" : 使用临时表 "using filesort" : 使用文件排序 "using where" : 使用where筛选得到的值