Skip to content

索引的设计原则

索引的设计可以遵循一些已有的原则,创建索引的时候应尽量考虑符合这些原则,便于提升索引的使用效率,更高效的使用索引。

1. 唯一性索引

唯一性索引的值是唯一的

  • 可以更快速的通过该索引来确定某条记录。

例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。

如果使用姓名的话,可能存在同名现象,从而降低查询速度。

2. 排序、分组和联合操作的字段

ORDER BYGROUP BYDISTINCTUNION 等操作的字段,排序操作会浪费很多时间。

  • 如果为其建立索引,可以有效地避免排序操作。

3. 条件频率高查询条件的字段

如果某个字段经常用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。

  • 因此,为这样的字段建立索引,可以提高整个表的查询速度。

注意:常查询条件的字段不一定是所要选择的列。

换句话说:

  • 最适合索引的列是出现在 WHERE 子句中的列
  • 或连接子句中指定的列
  • 而不是出现在 SELECT 关键字后的选择列表中的列。

4. 限制索引的数目

索引的数目不是“越多越好”。

  • 每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大
  • 在修改表的内容时,索引必须进行更新,有时还可能需要重构。
  • 因此,索引越多,更新表的时间就越长。
  • 如果有一个索引很少利用或从不使用,那么会不必要地减缓表的修改速度。
  • 此外,MySQL 在生成一个执行计划时,要考虑各个索引,这也要花费时间。创建多余的索引给查询优化带来了更多的工作。
  • 索引太多,也可能会使 MySQL 选择不到所要使用的最佳索引。

5. 尽量使用数据量少的索引

如果索引的值很长,那么查询的速度会受到影响

例如,对一个 CHAR(100) 类型的字段进行全文检索需要的时间肯定要比对 CHAR(10) 类型的字段需要的时间要多。

6. 数据量小的表最好不要使用索引

  • 由于数据较小,查询花费的时间可能比遍历索引的时间还要短,索引可能不会产生优化效果

7. 尽量使用前缀来索引

  • 如果索引字段的值很长最好使用值的前缀来索引

例如,TEXT 和 BLOG 类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度。

8. 删除不再使用或者很少使用的索引

  • 表中的数据被大量更新, 应该定期找出这些索引,将它们删除。
  • 或者数据的使用方式被改变后,原有的一些索引可能不再需要, 应该定期找出这些索引,将它们删除。
  • 从而减少索引对更新操作的影响。

总结

选择索引的最终目的是为了使查询的速度变快,上面给出的原则是最基本的准则,但不能只拘泥于上面的准则。

  • 应该在学习和工作中不断的实践。
  • 根据应用的实际情况进行分析和判断。
  • 选择最合适的索引方式。