返回

虚竹哥告诉你该如何辨别索引失效七种场景(SQL小虚竹)

后端

虚竹哥教你一句功法口诀:

模型数或运最占,更新频繁建唯一,外键关联要唯一,组合索引先写主,范围查询写最左,统计直方要常看,数据量大加分区。

一、模型数或运最占

所谓“模型”,就是指数据表中的字段类型。例如,整数型、字符型、日期型等。所谓“数或运”,就是指数据表中的字段值。例如,1、2、3等。

如果数据表中的字段类型不合适,或者字段值分布不均匀,那么就很容易导致索引失效。例如,如果数据表中的字段类型是字符型,但是字段值却都是数字,那么索引就无法发挥作用。

二、更新频繁建唯一

如果数据表中的字段经常被更新,那么就应该在该字段上建立唯一索引。唯一索引可以防止数据表中出现重复的数据,从而提高查询性能。

例如,如果数据表中有一个字段叫做“用户ID”,并且这个字段经常被更新,那么就应该在该字段上建立唯一索引。这样可以防止数据表中出现重复的用户ID,从而提高查询性能。

三、外键关联要唯一

如果数据表之间存在外键关联,那么就应该在被关联字段上建立唯一索引。唯一索引可以防止数据表之间出现重复的数据,从而提高查询性能。

例如,如果数据表A中有一个字段叫做“用户ID”,并且数据表B中有一个字段叫做“用户ID”,并且这两个字段之间存在外键关联,那么就应该在数据表A中的“用户ID”字段上建立唯一索引。这样可以防止数据表A中出现重复的用户ID,从而提高查询性能。

四、组合索引先写主

如果数据表中有多个字段需要建立索引,那么就应该先建立组合索引。组合索引可以提高查询性能,尤其是当查询条件涉及多个字段时。

例如,如果数据表中有一个字段叫做“用户ID”,还有一个字段叫做“用户名”,并且这两个字段经常被一起使用,那么就应该在数据表中建立一个组合索引。这样可以提高查询性能,尤其是当查询条件涉及“用户ID”和“用户名”这两个字段时。

五、范围查询写最左

如果数据表中的字段经常被用于范围查询,那么就应该在该字段上建立范围索引。范围索引可以提高查询性能,尤其是当查询条件涉及范围查询时。

例如,如果数据表中有一个字段叫做“年龄”,并且经常被用于范围查询,那么就应该在该字段上建立范围索引。这样可以提高查询性能,尤其是当查询条件涉及“年龄”字段的范围查询时。

六、统计直方要常看

数据表中的统计信息可以帮助优化器选择合适的索引。因此,应该经常查看数据表中的统计信息,并根据统计信息优化索引。

例如,如果数据表中的某个字段经常被用于范围查询,那么就应该在该字段上建立范围索引。但是,如果数据表中的某个字段经常被用于精确查询,那么就应该在该字段上建立精确索引。

七、数据量大加分区

如果数据表中的数据量非常大,那么就应该对数据表进行分区。分区可以提高查询性能,尤其是当查询条件涉及分区字段时。

例如,如果数据表中有一个字段叫做“日期”,并且数据表中的数据量非常大,那么就应该对数据表进行分区。这样可以提高查询性能,尤其是当查询条件涉及“日期”字段时。