建组合索引的时候,区分度最高的在最左边。
正例:如果 where a=? and b=? ,a 列的几乎接近于唯一值,那么只需要单建 idx_a 索引即
可。
说明:存在非等号和等号混合判断条件时,在建索引时,请把等号条件的列前置。如:where a>?
and b=? 那么即使 a 的区分度更高,也必须把 b 放在索引的最前列。

区分度是什么

首先,组合索引指的是将多个列组合在一起形成的索引,用于加快查询速度。在建立组合索引时,应该将区分度最高的列放在索引的最左边。

区分度是指该列上不同值的数量占该列总值数量的比例。区分度越高,表示该列对于查询过滤的效果越好,因为它可以帮助缩小查询范围。因此,将区分度最高的列放在索引的最左边,可以使查询更快地命中索引,提高查询效率。

等号条件的列放在最左边

其次,如果查询中包含等号条件和不等号条件混合的情况,应该将等号条件的列放在索引的最左边。因为等号条件只需要精确匹配,而不等号条件需要匹配一定的范围,所以将等号条件的列放在最左边可以更快地缩小查询范围。

例如,当查询条件为 WHERE a=? AND b=? 时,如果列 a 的区分度几乎接近于唯一值,那么只需要单建 idx_a 索引即可。而当查询条件为 WHERE a>? AND b=? 时,虽然列 a 的区分度更高,但由于存在不等号条件,应该将列 b 放在索引的最左边。

总之,建立组合索引时应该优先考虑区分度最高的列,同时应该将等号条件的列放在索引的最左边,以提高查询效率。

mysql 建立组合索引

在 MySQL 中,可以使用 CREATE INDEX 语句来创建组合索引。组合索引也称为联合索引,它是一种包含多个列的索引。与单列索引不同,组合索引可以根据多个列的值来快速定位数据,从而提高查询效率。

下面是一个示例 SQL 语句,演示如何创建一个组合索引:

CREATE INDEX idx_name_age ON my_table (name, age);

在上面的示例中,我们创建了一个名为 idx_name_age 的组合索引,它包含了 my_table 表中的 nameage 两个列。通过这个组合索引,可以根据 nameage 的值来快速定位数据。

总结

创建组合索引时需要考虑列的顺序。如果需要根据某个列进行精确匹配,那么应该将这个列放在索引的最前面;如果需要根据多个列进行排序或者范围查询,那么应该将这些列放在索引的后面。此外,组合索引的列数应该尽可能少,否则可能会影响索引的效率和性能。