与 b 树索引相比,对具有低不同值的位图索引字段的查询是否更快?
与 b-tree 索引相比,位图索引在具有低不同值的字段上提供更好的查询性能的普遍想法。但这是真的吗?
例如,
SELECT * FROM some_table WHERE color = 'RED'
。这里该color
字段具有较低的不同值,可以使用 b-tree 或位图索引进行索引:
- 如果
color
使用b-tree索引,那么为了执行上面的查询,数据库应该执行二进制搜索 + 中序遍历(从两个方向的二进制搜索结果),这给了我们 O(log N + K) ~ O(log N) 时间复杂度,其中 K - 是结果行数。K <= N。 - 如果
color
使用位图索引,那么数据库会进行一次完整扫描,这会产生 O(N) 时间复杂度。
所以,从我的角度来看,位图索引更糟糕。我对吗?