当前位置:Gxlcms > 数据库问题 > 网站优化—mysql explain执行计划

网站优化—mysql explain执行计划

时间:2021-07-01 10:21:17 帮助过:4人阅读

:通过上面的步骤就可以对MySQL进行调优,只要将上面的步骤重复不断执行,可以使用MySQL在最优的情况下工作。

?

profile定义:MySQL提供的一个可以分析SQL语句执行过程的工具,通过它大致可以了解到MySQL将如何执行用户传递过来的sql语句。

用法

使用的时候只要在对应的sql语句前面,加上关键字explain 或者同义词 desc

# desc select * from tableName where id = 1000000;

# explain select * from tableName where id = 1000000;

以上两条sql执行效果是等价的。

?

可以先简单对比 有索引 和 无索引 执行计划:

no_index无索引的情况下分析:

技术分享

技术分享

?

rows: 代表查询满足该sql语句的结果,可能需要查询行的数量。

?

id存在主键索引的情况下分析:

技术分享

?

type:重点分析

?

  • all 代表全表扫描,一般在不使用索引的情况下回出现该值

    技术分享

    全表扫描:一行一行的逐行比较,然后返回满足条件的记录

    ?

  • const,代表使用了主键索引。 开发之中,尽量出现这个。常量查找

    技术分享

    ?

    3. range代表范围操作,当执行的sql语句是一个范围查找的时候,也可以使用索引。

    技术分享

    range含义解释:由于索引是排好序的结构。沿着这个有序的结构,再去截取一段有序的数据,是可以利用上索引的。

    ?

    ?

    面试题:什么样的字段适合建立索引?(建立索引的时候有什么考虑?)

    答:

  • 在where条件后面作为查询的字段需要建立索引。
  • 在(排序order 范围range 分组group)这些情况下也是可以使用索引的,所以在排序字段后面加上索引也是可以的。

    注意:在where条件后也不是所有的字段都建立索引,因为索引本身也是有开销的。

    ?

  • index代表使用了索引

    技术分享

    当做记录统计的时候,可以直接使用索引返回记录的行数,就没必要去对磁盘文件的行数做统计。

    ?

  • system,当表中的记录只有一行的时候,MySQL认为可以直接的返回记录信息,而不必要使用索引文件。一般出现在一行记录(自己建立的表)或者系统级别的表(mysql.user)一般MySQL在启动的时候,会将部分的系统级别的表优先载入到内存做一个缓存。

    技术分享

    ?

  • null,可能出现,如果出现这个,也代表很好。基本不容易出现。

    技术分享

    总结:null 》system》const》range》index》all

    注意:尽量不要出现all

    ?

  • 网站优化—mysql explain执行计划

    标签:

    人气教程排行