如果,创建索引后,遍历的次数与创建索引之前,变化不大。

  说明,创建索引时,选择的列名不合理,需要选择合适的列重建索引。这是分析索引优劣的方法。

  追加了索引后,也不能保证在每次检索时都会使用列索引。

  如果,SQL 检索语句编写不当,无法使用索引。

  1、LIKE 运算符,进行模糊检索时,只能在前方一致的检索时,才能使用索引。

  以下写法,索引不会被使用。

SELECT * FROM employee WHERE lname_pinyin LIKE '%w%';
SELECT * FROM employee WHERE lname_pinyin LIKE '%w';

  2、使用 IS NOT NULL、<> 的场合,也不会使用索引。如下:

SELECT * FROM employee WHERE lname_pinyin IS NOT NULL;
SELECT * FROM employee WHERE lname_pinyin <> 'wang';

  3、对列使用了运算或者函数的情况下,不会使用索引,如下:

SELECT * FROM employee WHERE YEAR(birth) = '1980'; -- 不使用索引
SELECT * FROM employee WHERE birth >= '1980-01-01' AND birth <= '1980-12-31'; --使用了索引

  4、复合索引的第一列,没有包含在 WHERE 条件语句中,如下:

CREATE INDEX idx_pinyin ON employee(lname_pinyin, fname_pinyin);
SELECT * FROM employee WHERE lname_pinyin = 'wang' AND fname_pinyin = 'xiao'; --用了索引
SELECT * FROM employee WHERE lname_pinyin = 'wang'; --用了索引

SELECT * FROM employee WHERE fname_pinyin = 'xiao'; -- 没有使用索引
SELECT * FROM employee WHERE lname_pinyin = 'wang' OR fname_pinyin = 'xiao'; -- 没有使用索引

  实际开发过程中,需要积极使用 EXPLAIN 命令,来确认索引的使用情况,及时作相应修改。