虚竹哥告诉你该如何辨别索引失效七种场景(SQL小虚竹)
2023-12-02 13:18:28
虚竹哥教你一句功法口诀:
模型数或运最占,更新频繁建唯一,外键关联要唯一,组合索引先写主,范围查询写最左,统计直方要常看,数据量大加分区。
一、模型数或运最占
所谓“模型”,就是指数据表中的字段类型。例如,整数型、字符型、日期型等。所谓“数或运”,就是指数据表中的字段值。例如,1、2、3等。
如果数据表中的字段类型不合适,或者字段值分布不均匀,那么就很容易导致索引失效。例如,如果数据表中的字段类型是字符型,但是字段值却都是数字,那么索引就无法发挥作用。
二、更新频繁建唯一
如果数据表中的字段经常被更新,那么就应该在该字段上建立唯一索引。唯一索引可以防止数据表中出现重复的数据,从而提高查询性能。
例如,如果数据表中有一个字段叫做“用户ID”,并且这个字段经常被更新,那么就应该在该字段上建立唯一索引。这样可以防止数据表中出现重复的用户ID,从而提高查询性能。
三、外键关联要唯一
如果数据表之间存在外键关联,那么就应该在被关联字段上建立唯一索引。唯一索引可以防止数据表之间出现重复的数据,从而提高查询性能。
例如,如果数据表A中有一个字段叫做“用户ID”,并且数据表B中有一个字段叫做“用户ID”,并且这两个字段之间存在外键关联,那么就应该在数据表A中的“用户ID”字段上建立唯一索引。这样可以防止数据表A中出现重复的用户ID,从而提高查询性能。
四、组合索引先写主
如果数据表中有多个字段需要建立索引,那么就应该先建立组合索引。组合索引可以提高查询性能,尤其是当查询条件涉及多个字段时。
例如,如果数据表中有一个字段叫做“用户ID”,还有一个字段叫做“用户名”,并且这两个字段经常被一起使用,那么就应该在数据表中建立一个组合索引。这样可以提高查询性能,尤其是当查询条件涉及“用户ID”和“用户名”这两个字段时。
五、范围查询写最左
如果数据表中的字段经常被用于范围查询,那么就应该在该字段上建立范围索引。范围索引可以提高查询性能,尤其是当查询条件涉及范围查询时。
例如,如果数据表中有一个字段叫做“年龄”,并且经常被用于范围查询,那么就应该在该字段上建立范围索引。这样可以提高查询性能,尤其是当查询条件涉及“年龄”字段的范围查询时。
六、统计直方要常看
数据表中的统计信息可以帮助优化器选择合适的索引。因此,应该经常查看数据表中的统计信息,并根据统计信息优化索引。
例如,如果数据表中的某个字段经常被用于范围查询,那么就应该在该字段上建立范围索引。但是,如果数据表中的某个字段经常被用于精确查询,那么就应该在该字段上建立精确索引。
七、数据量大加分区
如果数据表中的数据量非常大,那么就应该对数据表进行分区。分区可以提高查询性能,尤其是当查询条件涉及分区字段时。
例如,如果数据表中有一个字段叫做“日期”,并且数据表中的数据量非常大,那么就应该对数据表进行分区。这样可以提高查询性能,尤其是当查询条件涉及“日期”字段时。