美文网首页
sql优化1

sql优化1

作者: chrisghb | 来源:发表于2022-03-28 17:18 被阅读0次

1.普通索引
2.唯一索引
3.主键索引
4.组合索引
5.全文索引

  • select_type
      查询的类型,主要用于区别普通查询,联合查询,子查询等复杂查询
    simple: 简单的select查询,查询中不包含子查询或union查询。
    primary: 查询中若包含任何复杂的子部分,最外层查询则被标记为primary,也就是最后加载的就是PRIMARY。
    subquery: 在select 或where 列表中包含了子查询。
    derived: 在from列表中包含的子查询被标记为derived,mysql会递归这些子查询,把结果放在临时表里。
    union: 若第二个select出现在union之后,则被标记为union。若union包含在from子句的子查询中,外层select将被标记为derived。
    union result: 从 union 临时表检索结果的 select。
  • type
      查询类型从最好到最差依次是:system>const>eq_ref>ref>range>index>All。一般情况下,得至少保证达到range级别,最好能达到ref。
    All:全表扫描数据文件,然后再在server层进行过滤返回符合要求的记录。是最差的一种查询类型。
    index:扫描全部索引树,把索引从头到尾扫一遍,。常见于使用索引列就可以处理,不需要读取数据文件的查询。index是从索引中读取,all从硬盘中读取。
    range:扫描部分索引。只检索给定范围的行,使用一个索引来选择行,如where语句中出现了between,<,>,in,like等等查询。
    ref:相比eq_ref,不适用唯一索引,而是使用普通索引或者唯一索引的部分前缀。索引要和某个值相比较,可能会找到多个符合条件的行。
    一般有以下情况:
    非主键或者唯一键的等值查询;join连接字段是非主键或者唯一键;最左前缀索引匹配。
    eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常见于主键或唯一索引扫描。
    const:表示通过索引一次就找到了,const即常量,它用于唯一索引或者主键索引。如将主键置于where条件中,mysql就能将该查询转换为一个常量。
    system:表只有一行记录,这是const类型的特例,平时不会出现。
  • key
      实际使用的索引,如果为null,则没有使用索引。因此会出现possible_keys列有可能被用到的索引,但是key列为null,表示实际没用索引。

  • Extra
    执行情况的描述和说明,该列的信息是调优的重点。
    1. Distinct: MYSQL一旦找到了与行相联合匹配的行,就不再搜索了
    2. Not exists:MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了
    3. Range checked for each: 没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一
    4. Using filesort:用外部排序而不是索引排序,数据较小时从内存排序,否则需要在磁盘完成排序(出现此信息,就要考虑优化,一般考虑索引+业务)
    5. Using index:列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候
    6. Using temporary: MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上(出现此信息,就要考虑优化,一般考虑)
    7. Using index condition:查询的列不完全被索引覆盖,where条件中是一个前导的范围
    8. Using where:使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题
    9. select tables optimized away:使用某些聚合函数(比如:max、min)来访问存在索引的某个字段

相关文章

网友评论

      本文标题:sql优化1

      本文链接:https://www.haomeiwen.com/subject/doipjrtx.html