索引位域的排序顺序

时间:2016-09-18 13:13:16

标签: mysql sorting innodb

我使用的是一个只能包含值10的位域。我想索引这个字段。将值设置为1的行可能小于数据的5%。

我是否正确地假设索引应按降序排序,或者mySQL知道哪种方式遍历索引以获得最佳性能?

PS:我使用innoDB作为引擎。

1 个答案:

答案 0 :(得分:0)

在列上只有两个值的索引通常没有意义。原因?那么,索引的主要好处是限制为查询读取的数据页的数量。但是,使用两个值时,每个数据页可能会有一些带有0的记录和一些带有1的记录。因此,索引不是特别有用。

这有两点需要注意。首先,二进制(布尔)列在多列索引中是合理的。例如,这对于满足引用该列的where子句非常重要。

其次,如果索引是 clustered ,则所有0都存储在一起,所有1都存储在一起。然后 - 近似 - 只需要读取5%的行来处理限制为稀有值的查询。但请注意,这会导致更新值的开销更大,因为更改值意味着实际删除数据页上的一条记录并在另一页上插入另一条记录。