gpt4 book ai didi

postgresql - 在这种情况下,为什么 Postgresql 不对我的复合索引使用 Index Only Scan?

转载 作者:行者123 更新时间:2023-11-29 12:20:05 24 4
gpt4 key购买 nike

我的表有整数列“a”、“b”。 “a”只有很少(<30)个不同的值,但对于每个“a”,存在大量不同的“b”(>10**7)。为了加快速度,我创建了复合索引 (a,b)。我观察到

select count(*) from tab where a=1; 

跑得快,也

select count(*) from tab where a=2;

跑得很快,但是

select count(*) from tab where a=1 or a=2;

运行(oh-my-god-so)慢,对于

也是如此
select count(*) from tab;

运行解释解释,快速查询使用

->  Index Only Scan using idx on tab

但是对于慢查询,使用顺序扫描。

为什么会这样?为什么 Postgresql 对后两个查询不使用相同的索引?仅仅是查询规划器的不完善,还是有更深层次的原因导致不能使用 Index Only Scan?

最佳答案

因为对于像 a=1 这样的条件,不需要为每一行重新检查条件。因此,它只是遍历 b 树并计算所有 a=1 的叶子。在这种情况下无需引出实际数据。我会尝试联合使用 a=1 和 a=2 的两个查询,或者像 a<=2 这样的条件可能会起作用。

关于postgresql - 在这种情况下,为什么 Postgresql 不对我的复合索引使用 Index Only Scan?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30919311/

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