使用哈希索引和b +树索引

时间:2018-05-09 15:52:34

标签: database postgresql indexing

我的表格(user_tran)有3个字段" user_id "," transaction_id ",& #34;的 TIME_STAMP "

我哈希索引user_idtransaction_id(因为我需要完全匹配)和time_stamp上的b +树索引

查询

select user_id from user_tran where transaction_id = 1 and time_stamp > now() - 3 days; 

select transaction_id from user_tran where user_id = 1 and time_stamp > now() - 3 days; 

有谁知道这个查询的复杂性是什么?我知道如果我们只是按哈希索引列过滤,它将是 o(1),而b + tree给出 o(lgn)。但是将它们组合在一起呢?

那会是 o(lgn + 1)吗?

另外,如何将表存放在引擎盖下。 DBMS会同时维护3个索引(2个哈希和1个b +树)吗?

用Google搜索了一下,但没有找到答案。

1 个答案:

答案 0 :(得分:1)

使用这样的三个索引,使用索引的查询的复杂性将是 O(n),因为组合多个索引的唯一方法是位图和 。创建位图需要读取整个索引,即 O(n)

因此,除非单独的条件都没有选择性,否则我假设PostgreSQL会选择对最具选择性的索引进行常规索引扫描,并使用其他条件作为过滤器。此类查询的复杂性与匹配索引条件的行的百分比成比例(例如,如果只有user_id = 1的常量行数,则 O(1),而不管表格大小)。

这些查询的理想索引是:

CREATE INDEX ON user_tran (transaction_id, time_stamp);
CREATE INDEX ON user_tran (user_id, time_stamp);