首页 > 解决方案 > PostgreSQL多列索引最佳实践?

问题描述

下面是我的表格脚本。

CREATE TABLE tbloom AS
 SELECT
 (random() * 100)::int as i1,
 (random() * 1000)::int as i2,
 (random() * 10000)::int as i3,
 (random() * 100000)::int as i4,
 (random() * 1000000)::int as i5,
 (random() * 10000000)::int as i6,
 (random() * 50000000)::int as i7    
 FROM
 generate_series(1,300000000);

下面是我的索引脚本

 CREATE index btreeidx ON tbloom (i1, i2, i3, i4, i5, i6,i7);

以下是我的选择查询

select * from tbloom  where i1=55 and i2=119 and i3=2196 limit 20;

下面是查询分析 查询分析

执行时需要超过 1 分 30 秒。如何优化查询时间,为此建议使用哪个索引?在我的应用程序中,用户可以选择任意组合的数据选择,这意味着用户可以像这样查询 i2,i3 或 i4,i6。请建议我正确的方法...

注意: 我用单列创建了索引。它在 300 毫秒到 700 毫秒内给出结果,但根据我的要求,用户可以选择任何列(1 或 2 或所有列)

标签: postgresql

解决方案


您展示的示例绝对应该使用索引,因为WHERE子句中使用了前三个索引列。

但是表和索引的名称以及您的评论

根据我的要求,用户可以选择任何列(1 或 2 或所有列)

让我假设您实际上想要一个绽放指数。

为此,您必须bloom在数据库中定义扩展名:

CREATE EXTENSION bloom;

并用 定义索引USING bloom

CREATE index btreeidx ON tbloom USING bloom (i1, i2, i3, i4, i5, i6, i7);

然后可以在WHERE条件中任意组合使用索引列,索引就可以使用了。


推荐阅读