对于自定义分页解决方案,我必须简单请求:
SELECT id, column1, column2, column3
FROM my_table
WHERE column1 IS NOT NULL AND...
ORDER BY id
LIMIT 10 OFFSET 0
这个返回页面的数据。
SELECT COUNT(id) FROM my_table WHERE column1 IS NOT NULL AND...
这一个返回表格的总和。
第一次请求没有问题,性能良好。 但第二个是太慢......当然id是一个索引(主键)
有没有办法更快地返回计数请求的结果?或者将2个请求连接成一个?
感谢您的帮助
答案 0 :(得分:1)
您需要详细说明where
条款。
一种选择是根据where
子句添加索引。对于这个版本:
SELECT COUNT(id)
FROM my_table
WHERE column1 IS NOT NULL ;
将select
更改为COUNT(*)
或COUNT(1)
- 我发现如果你没有真正使用它,我会发现它更清晰。
然后,您将使用my_table(column1)
上的索引。
另一种选择是创建过滤索引:
create index filind_my_table on (id)
where column1 is not null . . .;
Postgres应该能够将此索引用于您的查询,它应该运行得更快。
答案 1 :(得分:0)
您是否使用执行计划检查了查询结果? 它会显示您的查询中是否缺少索引。