SQL调优1.0

sql调优是需要时间积累的,这里只是记录一些基础的知识,也是我第一篇sql调优

一般情况下sql调优主要依靠explain命令:expain出来的信息有10列,分别是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra:

每个字段的含义

  • id:选择标识符(比较重要)
    这是SELECT的查询序列号。id越大,查询优先级越高。如果id一样,从上往下执行。

  • select_type:表示查询的类型。(不重要)
    (1) SIMPLE(简单SELECT,不使用UNION或子查询等)
    (2) PRIMARY(子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY)
    (3) UNION(UNION中的第二个或后面的SELECT语句)
    (4) DEPENDENT UNION(UNION中的第二个或后面的SELECT语句,取决于外面的查询)
    (5) UNION RESULT(UNION的结果,union语句中第二个select开始后面所有select)
    (6) SUBQUERY(子查询中的第一个SELECT,结果不依赖于外部查询)
    (7) DEPENDENT SUBQUERY(子查询中的第一个SELECT,依赖于外部查询)
    (8) DERIVED(派生表的SELECT, FROM子句的子查询)
    (9) UNCACHEABLE SUBQUERY(一个子查询的结果不能被缓存,必须重新评估外链接的第一行)

  • table:输出结果集的表
    显示这一步所访问数据库中表名称

  • type:表示表的连接类型(最重要)
    ALL、index、range、 ref、eq_ref、const、system、NULL(从左到右,性能从差到好)进行调优的时候最好能够达到ref,range也能接受。

  • possible_keys:表示查询时,可能使用的索引
    指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用(该查询可以利用的索引,如果没有任何索引显示 null)

  • key:表示实际使用的索引
    key列显示MySQL实际决定使用的键(索引),必然包含在possible_keys中

  • key_len:索引字段的长度
    表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的)

  • ref:列与索引的比较
    列与索引的比较,表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

  • rows:扫描出的行数(估算的行数)
    估算出结果集行数,表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数

  • Extra:执行情况的描述和说明

然后我们需要知道sql一般的解析过程:

posted @ 2020-09-18 12:20  大嘤熊  阅读(109)  评论(0编辑  收藏  举报