加索引能大大提高数据查询效率,这个在接口设计之出也会考虑到,这里不再多赘述,随着需求的迭代,我们重点整理一下索引不生效的一些场景,希望对小伙伴们有所帮助。
具体不生效场景不再一一举例,后面有时间的话,单独整理一下。
索引不生效的具体场景很多,以下列举几个常见的情况:
-
数据量较小:如果表中的数据量较小,可能因为查询语句的优化器选择了全表扫描,而不在计算机系统中,索引常用于提高查找数据的速度,所以索引不生效通常是由于以下场景造成的:
-
索引列出现类型转换,如将字符串和数字进行比较,这会导致索引不生效。
-
使用了一些特殊的函数,如在 WHERE 子句中使用了不支持索引的函数,如:SUBSTRING、DATE_FORMAT、REGEXP 等,这也会导致索引不生效。
-
对于联合索引,如果在查询语句中没有使用到所有联合索引的列,那么索引也可能不会生效。
-
数据表中的数据过于分散,即某些索引列的数据分布比较松散,这种情况下,使用索引进行比较时可能需要扫描大量的数据页,也会降低索引的效率。
-
查询的数据量较少,这种情况下,使用索引的效果不一定比全表扫描要快。
这些情况可能导致索引不生效,造成查询速度变慢,对于这些场景,我们可以通过优化查询语句、增加索引、修改数据分布等方式来改善索引不生效对查询性能的影响。