双重查询请求,表现不佳

时间:2016-05-24 21:19:00

标签: sql postgresql

对于自定义分页解决方案,我必须简单请求:

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个请求连接成一个?

感谢您的帮助

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)

您是否使用执行计划检查了查询结果? 它会显示您的查询中是否缺少索引。