更快的ORDER OF LIMIT OFFSET

时间:2016-04-17 17:34:14

标签: sql postgresql indexing

我有一个简单的请求,如:

SELECT id, champs1, champs2, champs3, count(*) OVER() AS full_count
FROM my_table
ORDER BY champs1 ASC
LIMIT 10 OFFSET 0

LIMIT和OFFSET用于对我的结果进行分页。

但请求很慢:约20秒。我的" my_table"表有~8百万行。

我在" champs1"上放了一个索引。专栏,但它仍然很慢。

如何更快地提出此请求?谢谢你的帮助

1 个答案:

答案 0 :(得分:2)

在没有full_count的情况下运行查询需要多长时间?这可能是问题的一部分(我不确定)。

你可以试试这个:

SELECT id, champs1, champs2, champs3, fc.full_count
FROM my_table CROSS JOIN
     (SELECT count(*) as full_count FROM my_table) fc
ORDER BY champs1 ASC
LIMIT 10 OFFSET 0;

然后,请确保您在my_table(champs1)上有索引。