面视题之——索引失效
失效场景一
-
当我们执行sql语句的查询条件中包含函数,那么数据库就无法使用索引来优化查询,因为它需要对每一行数据都调用函数来计算结果,这会导致查询速度变慢。
例如:SELECT * FROM table_name WHERE name = 'John' AND age(+) > 30;
这个查询语句中使用了 age(+) 函数,它表示 age 列包含非空值。这个函数需要对每一行数据都进行计算才能得到结果,因此查询就无法使用索引来优化查询,可能导致查询速度变慢。
此时就是遍历了整张表,索引就失效了。
数据库中哪些函数会导致索引失效
- 如果在查询条件中使用了函数,比如SUM、AVG、MAX、MIN等聚合函数,或者在WHERE子句中使用了其他函数,比如DATEPART、CONVERT等,都会导致索引失效。因为这些函数需要对每一行数据进行计算,无法从索引中直接获取数据。
解决方法之一
我们可以冗余你要查询时计算的字段,这个字段通过后台计算传给数据库。(虽然会打破数据库的第三范式,但是却提升了效率)