前言

索引在数据库中是一种提高查找效率的数据结构。

什么时候使用索引

  • 字段的数值有唯一性;
  • 字段频繁作为 WHERE 条件(包括 UPDATA、DELETE);
  • 字段经常用来 GROUP BY 或者 ORDER BY;
  • DISTINCT 字段;
  • 多表连接时,连接的字段和 WHERE 条件字段;

什么时候不需要使用索引

  • 该字段是非条件字段;
  • 表中记录行很少;
  • 字段中出现大量重复的值;
  • 字段需要频繁更新;

索引失效

  • 对索引使用了表达式计算或者函数;
  • WHERE 条件的 OR 中只有一个条件为索引;
  • 模糊查询的开头为%;
  • 索引字段使用了 NULL 判断;
  • 联合索引不符合最左原则;

使用 EXPLAIN

EXPLAIN 可以帮助我们了解数据表的读取顺序、SELECT 子句的类型、数据表的访问类型、可使用的索引、实际使用的索引、使用的索引长度、上一个表的连接匹配条件、被优化器查询的行的数量以及额外的信息(比如是否使用了外部排序,是否使用了临时表等)等。

image.png

SQL 执行的顺序是根据 id 从大到小执行的,也就是 id 越大越先执行,当 id 相同时,从上到下执行。

数据表的访问类型所对应的 type 列是我们比较关注的信息。type 可能有以下几种情况:

image.png

在所有的 type 中,all 是最坏的情况,采用了全表扫描的方式。index 采用索引进行全表扫描,这种方式的好处在于不需要对数据进行排序,但是开销仍然很大。如果 Extra 栏为 Using index,说明索引覆盖了查询的所有字段,因此不需要进行回表操作,减少开销并提升了速度。

我们需要提高并发的事务处理能力以及创建合适的索引。
事务和索引的使用是数据库的两个重要核心,事务保证了在修改的过程中数据的安全性和正确性,索引提高数据的查找效率。