Postgresql查询where、order by和limit的速度非常慢



我的表有问题,当我执行查询时,它有30-40m的记录:

select * 
from table c 
where c.column_a in (111111, 22222222, 333333333) 
order by c.column_b 
limit 30

它很慢。但是当我删除order by子句时,查询执行得非常快。我有两个索引:idx_column_a和多列索引idx_column-a_column_b我能做些什么来解决这个问题?

您可以通过如下重写查询来快速执行多列索引:

(select * from t c where c.column_a =1 order by c.column_b)
union all
(select * from t c where c.column_a =2 order by c.column_b)
union all
(select * from t c where c.column_a =3 order by c.column_b)
order by column_b limit 30;

遗憾的是,PostgreSQL不会用自然的查询编写方式为您生成如此快速的执行,也许有一天它会。(我给这个表起了合法的名字,减少了常数的重复性。(

相关内容

  • 没有找到相关文章