位图索引与b树时间复杂度

时间:2019-05-05 15:44:56

标签: database indexing bitmap b-tree-index

与b树索引相比,对具有低不同值的位图索引字段的查询是否更快?

与b树索引相比,位图索引在具有低不同值的字段上提供更好的查询性能的普遍想法。但这是真的吗?

例如, SELECT * FROM some_table WHERE color = 'RED'。 这里的color字段具有较低的不同值,可以使用b树索引或位图索引进行索引:

  • 如果color使用 b树索引,则为了执行上述查询,数据库应进行二进制搜索+有序遍历(双向双向搜索结果) ),这使我们得到O(log N + K)〜O(log N)时间复杂度,其中K-是结果行数。 K <= N。
  • 如果color使用位图索引,则数据库将进行完整扫描,从而使时间复杂度为O(N)。

因此,在我看来,位图索引甚至更糟。 我说的对吗?

1 个答案:

答案 0 :(得分:0)

通常,您的计算是正确的。但是,如果字段的唯一值很少,则K会变大并接近N。因此O(log N + K) ~ O(N)成立。

考虑查询SELECT * FROM employees WHERE gender='M' and marriage='YES'。如果M / F和YES / NO平均分布,则此查询将得出K = N / 4,即O(N)

另外,尽管位图并没有很大程度地提高复杂度(在这种情况下,两者都给出了O(N)的复杂度),但按位运算比普通运算要快得多。