Skip to content

什么样的情况需要设置索引

何时需要创建索引?

创建索引的主要目的是为了加快数据的检索速度。 在以下几种情况下,为字段创建索引通常是明智的选择:

  • 主键和外键: 主键具有唯一性,是数据表中每一行数据的唯一标识。为主键创建索引可以极大地提升数据检索效率。外键用于建立表与表之间的关联,为其创建索引可以加速连接查询。
  • 经常作为查询条件的字段: 如果一个字段经常出现在WHERE子句中,那么为该字段创建索引将大大提高查询效率,特别是在数据量庞大的表中。
  • 用于排序和分组的字段: 对经常用于ORDER BYGROUP BY子句的字段建立索引,可以有效提升排序和分组操作的性能,因为索引本身已经对数据进行了排序。
  • 具有唯一性约束的字段: 对于业务上要求唯一的字段,如用户邮箱或手机号码,创建唯一索引不仅能保证数据的唯一性,还能提高查询速度。
  • 连接查询中的字段: 在多表连接查询中,为连接字段创建索引可以显著提高查询性能。
  • 字符串字段的前缀: 对于较长的字符串字段,可以考虑创建前缀索引,即只对字符串的前几个字符创建索引。这样既能节省存储空间,又能提高查询效率。

何时不需要创建索引?

尽管索引有很多优点,但滥用索引也会对数据库性能产生负面影响。 以下情况通常不建议创建索引:

  • 表记录太少的表: 对于数据量非常小的表,全表扫描的速度可能比使用索引更快。通常建议在数据量超过300万时再考虑创建索引。
  • 选择性低的字段: 所谓选择性低,是指字段中存在大量重复的值,例如性别、状态等。对此类字段创建索引,查询优化器很可能会选择全表扫描,索引的意义不大。
  • 不常作为查询条件的字段: 如果一个字段很少在WHEREORDER BYGROUP BY子句中使用,那么为其创建索引只会增加不必要的开销。
  • 频繁更新的字段: 数据库在对数据进行增、删、改操作时,也需要动态维护索引,这会降低数据维护的速度。因此,对于需要频繁更新的字段,应谨慎创建索引。
  • 参与列计算的字段: 如果查询条件中对字段进行了函数运算或表达式计算,索引将不会生效。
  • 无序的值: 像UUID、MD5、HASH这类无序的长字符串不建议作为索引,因为它们在插入时可能会导致页分裂,影响性能。