项目开发中,性能是我们比较关注的问题,特别是数据库的性能;作为一个开发,经常和SQL语句打交道,想要写出合格的SQL语句,我们需要了解SQL语句在数据库中是如何扫描表、如何使用索引的。
0:Index Scan 索引扫描

MySQL执行计划的局限

执行计划输出有 id、select_type、table、partitions、type、possible_keys、key、key_len、ref、rows、filtered、extra

例如执行一个Explan: EXPLAIN SELECT * FROM billing_item_dis WHERE item_name='检查项目';
这将返回一个表格,其中包含了多个列,每列都有其特定的含义。以下是一些关键列的解释:

id: 查询的选择标识符,如果是子查询,id值会递增,id值越高,优先级越高。

select_type: 查询的类型,如简单查询(SIMPLE)或联合查询(UNION)。

table: 正在访问的表名。

type: 表示MySQL使用的连接类型,如全表扫描(ALL)或索引扫描(index)。

possible_keys: 显示可能应用于此查询的索引。

key: 实际使用的索引。

key_len: 使用的索引的长度。

ref: 显示索引的哪一列被使用了。

rows: MySQL估计为了找到所需的行而要读取的行数。

Extra: 包含不适合在其他列中显示的额外信息,如是否使用临时表或文件排序。

  1. EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况
  2. EXPLAIN不考虑各种Cache
  3. EXPLAIN不能显示MySQL在执行查询时所作的优化工作
  4. 部分统计信息是估算的,并非精确值
  5. EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划

参考文章:
https://www.cnblogs.com/sunjingwu/p/10755823.html
https://www.cnblogs.com/ataoxz/p/18377630