【发布时间】:2018-07-23 22:46:35
【问题描述】:
数据分页有两种实现方式。
SELECT
(SELECT count(*) FROM (SELECT * FROM "items") m) :: INT AS total,
"t".*
FROM (SELECT *
FROM "items") AS "t"
LIMIT '10';
Select count("t".*) over () as total, "t".*
FROM (SELECT *
FROM "items") AS "t"
LIMIT '10';
性能差异很大,似乎第二个使用大量时间来计算 count(*) over ()。
我猜Postgres首先为每一行计算total,然后限制结果,而不是在子查询(第一个)中,它首先限制然后计算子查询?
【问题讨论】:
-
限制在最后,但在计划时会在执行之前考虑
标签: postgresql