gpt4 book ai didi

PostgreSQL 优化 : Sequantial Scan VS Index Scan

转载 作者:行者123 更新时间:2023-11-29 14:19:04 25 4
gpt4 key购买 nike

我有一个关于 postgres 表上的选择的有趣案例:

advert (~2.5 million records)
id serial,
user_id integer (foreign key),
...

这是我的选择:

select count(*) from advert where user_id in USER_IDS_ARRAY

如果 USER_IDS_ARRAY 长度 <= 100 我接下来要解释分析:

Aggregate  (cost=18063.36..18063.37 rows=1 width=0) (actual time=0.362..0.362 rows=1 loops=1)
-> Index Only Scan using ix__advert__user_id on advert (cost=0.55..18048.53 rows=5932 width=0) (actual time=0.030..0.351 rows=213 loops=1)
Index Cond: (user_id = ANY ('{(...)}'))
Heap Fetches: 213
Planning time: 0.457 ms
Execution time: 0.392 ms

但是当 USER_IDS_ARRAY 长度 > 100 时:

Aggregate  (cost=424012.09..424012.10 rows=1 width=0) (actual time=867.438..867.438 rows=1 loops=1)
-> Seq Scan on advert (cost=0.00..423997.11 rows=5992 width=0) (actual time=0.375..867.345 rows=213 loops=1)
Filter: (user_id = ANY ('{(...)}'))
Rows Removed by Filter: 2201318
Planning time: 0.261 ms
Execution time: 867.462 ms

无论 USER_IDS_ARRAY 中的 user_id 是什么,只有长度很重要。

有没有人知道如何针对超过 100 个 user_id 优化此选择?

最佳答案

如果 SET enable_seqscan = OFF 仍然没有强制进行索引扫描,则意味着无法进行索引扫描。事实证明这里的索引是部分的。

关于PostgreSQL 优化 : Sequantial Scan VS Index Scan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36149077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com