- 查看表数据类型是否合理,有无遵循选取数据类型越简单越小的原则(越简单越好,越小越好)
- 表中的碎片是否整理
- 表的统计信息是否收集
- 查看执行计划,检查索引的使用情况,如果没有用到索引则考虑创建
- 在创建索引之前,还要查看索引的选择性,判断该字段是否适合创建索引
- 索引的选择性,指的是不重复的索引值(基数,cardinality)和表记录数的比值。选择性是索引筛选能力的一个指标。索引的取值范围是 0—1 ,当选择性越大,索引价值也就越大。
- 创建索引后,再查看执行计划,对标结果查看是否提高了查询效率
创建索引时考虑3个经常:
- 经常被查询的列(一般放在where条件后)
- 经常用于表连接的列
- 经常排序分组的列(order by或group by后面的字段)
四个不要:
- 选择性低的字段不要创建索引(如性别、状态)
- 很少查询的列不要创建索引
- 大数据类型字段不要创建索引
- 尽量避免使用NULL,应该指定列为NOT NULL,如果有空值需求,可以使用空字符串
索引的优点:
- 提高数据检索效率
- 提高聚合函数效率
- 提高排序效率
- 使用覆盖索引可以避免回表
使用不到索引的情况:
- 通过索引扫描的行记录数超过全表的30%,优化器就不会走索引,而变成全表扫描
- 联合索引中,第一个查询条件不是最左索引列
- 联合索引中,第一个索引列使用范围查询,只能使用到部分列,有ICP出现
- 联合索引中,第一个查询条件不是最左前缀列
- 模糊索引条件列最左以通配符%开始
- 两个单列索引,一个用于检索,一个用于排序。这种情况下只能使用到一个索引。因为查询语句中最多只能使用一个索引,考虑建立索引联合
- 查询字段上面有索引,但是使用了函数运算