提升海量表上的 PostgreSQL 分页性能
使用 OFFSET
从大型 PostgreSQL 表(数百万行)检索分页数据会严重影响查询速度。本文提出了一种卓越的优化策略:键集分页。
键集分页:一种更有效的方法
键集分页通过利用上一页中最后一行的值来避免 OFFSET
的性能缺陷。 这是查询:
<code class="language-sql">SELECT * FROM big_table WHERE (vote, id) > (vote_x, id_x) ORDER BY vote, id LIMIT n;</code>
vote_x
和 id_x
代表上一页最后一行的 vote
和 id
。 这允许数据库有效地跳过行,与 OFFSET
.
索引增强
为了获得最佳性能,请在 WHERE
子句中使用的列上创建索引:
<code class="language-sql">CREATE INDEX vote_order_asc ON big_table (vote, id);</code>
重要提示:
(vote, id)
组合必须是唯一的,以确保结果一致。ORDER BY
子句的方向必须与索引的方向匹配。ORDER BY
方向的查询。进一步阅读:
以上是键集分页如何优化大偏移量的 PostgreSQL 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!