假设我有 100 000 条记录,其中 20 条记录与具体用户相关。 我正在寻找确认,在查询中添加 where 子句将使 offset 子句仅扫描这 20 行。 例如
record是一个表,它包含user_id的索引
SELECT r.user_id, r.book_name FROM record r WHERE r.user_id = 1 ORDER BY r.book_name LIMIT 2 OFFSET 2;
任何减少数据的 where 子句谓词都将允许 ORDER BY 更快地工作,因为需要排序的元组更少。
请查看说明以查看计划。
PostgreSQL 进行了优化,可以在许多存在 LIMIT/OFFSET 的情况下执行不同的排序(top-n 堆排序)。你可以在stackexchange中搜索到很多关于优化OFFSET的文章。
是博客文章。 带有“快”字的引号,情人眼里出西施。对于用例来说足够快。可能需要进行其他调整,例如 work_mem 和索引以使查询“足够快”。
在查询中,OFFSET 子句仅对 WHERE 子句返回的行进行操作,这意味着它会跳过筛选结果的前 n 行,然后应用 LIMIT 返回指定的行数。执行计划显示,首先进行过滤,然后进行偏移和限制应用。
这里是查询分析的SS,你可以看到它会首先应用条件,然后应用限制。到我们得到表单结果的20条记录。
我希望这个解释有帮助。