数据库索引调优

Posted gis-sky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库索引调优相关的知识,希望对你有一定的参考价值。

一、索引

1、索引类型

  普通索引:无任何限制的索引
  唯一索引:列值唯一的索引,可以为空值
  主键索引:表的主键,特殊的唯一性索引,不能为空值
  组合索引:多个字段上的索引,遵循左前缀集合
  全文索引:来查找文本中的关键字

2、使用explain+sql语句进行调优

    (1)explain包含的信息包含:技术分享图片

     主要从id、type、key、rows、Extra分析

     (2)id

    表示执行的先后顺序,id值大的先执行,小的后执行,id值相同的从上到下执行

     (3)type

    访问类型,结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

    建议尽量达到range级别,常见类型介绍如下:

    const:通过索引一次找到,通常用于主键或唯一性索引

    eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键 或 唯一索引扫描。 

    ref:非唯一性索引扫描,返回匹配某个单独值的所有行

    range:只检索给定范围的行,使用一个索引来选择行。key列显示使用了那个索引。一般就是在where语句中出现了bettween、<、>、in等的查询

    index:Index与ALL虽然都是读全表,但index是从索引中读取,而ALL是从硬盘读取

    ALL:Full Table Scan,遍历全表以找到匹配的行 

  (4)key

    实际使用的索引,如果为NULL,则没有使用索引。查询中如果使用了覆盖索引,则该索引仅出现在key列表中 

  (5)rows

    根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数

  (6)Extra

    Using index: 表示相应的select操作中使用了覆盖索引(Covering Index),避免了访问表的数据行,效率高 ,如果同时出现Using where,表明索引被用来执行索引键值的查找,如果没用同时出现Using where,表明索引用来读取数据而非执行查找动作。

 

    

 







以上是关于数据库索引调优的主要内容,如果未能解决你的问题,请参考以下文章

MySQL索引和SQL调优

MySQL 索引机制以及调优

MySQL 索引机制以及调优

MySQL调优之-索引指南

MySQL调优索引优化

SQL Server调优系列进阶篇(如何索引调优)