postgresql – Postgres数组重叠(\u0026\u0026)运算符可以使用索引吗?

postgresql – Postgres数组重叠(\u0026\u0026)运算符可以使用索引吗?,第1张

概述我们有一个带有索引数组列的表: CREATE TABLE mention ( id SERIAL, phraseIds integer[], PRIMARY KEY (id));CREATE INDEX indx_mentions_phraseIds on mention USING GIN (phraseids public.gin__int_ops); 使用此列上的“重叠”运算 我们有一个带有索引数组列的表:
CREATE table mention (  ID SERIAL,phraseIDs integer[],PRIMARY KEY (ID));CREATE INDEX indx_mentions_phraseIDs on mention USING GIN (phraseIDs public.gin__int_ops);

使用此列上的“重叠”运算符的查询似乎不使用索引:

explain analyze select m.ID FROM mention m WHERE m.phraseIDs && ARRAY[11638,11639];Seq Scan on mention m  (cost=0.00..933723.44 rows=1404 wIDth=4) (actual time=103.018..3751.525 rows=1101 loops=1)Filter: (phraseIDs && '{11638,11639}'::integer[])Rows Removed by Filter: 7019974Total runtime: 3751.618 ms

是否有可能让Postgresql使用索引?或者我们应该做别的事吗?

更新:我使用’SET enable_seqscan TO off’重复测试,但索引仍未使用.

更新:我应该提到我使用9.2和intarray扩展.

更新:似乎intarray扩展是此问题的一部分.我重新创建了表而没有使用intarray扩展,并且索引按预期使用.任何人都知道如何让索引与intarray扩展一起使用?文档(http://www.postgresql.org/docs/9.2/static/intarray.html)表示索引支持&&amp ;.

我在Postgresql 9.2中构建了一个类似的表;区别在于使用GIN(动词);出于某种原因,我似乎没有在此上下文中提供int_ops.我加载了几千行随机(ish)数据.

设置enable_seqscan off让Postgresql使用索引.

Postgresql计算出顺序扫描的成本低于位图堆扫描的成本.顺序扫描的实际时间是位图堆扫描的实际时间的10%,但顺序扫描的总运行时间略大于位图堆扫描的总运行时间.

总结

以上是内存溢出为你收集整理的postgresql – Postgres数组重叠(\u0026\u0026)运算符可以使用索引吗?全部内容,希望文章能够帮你解决postgresql – Postgres数组重叠(\u0026\u0026)运算符可以使用索引吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1164483.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存