较高的 LIMIT OFFSET 对 MySQL 查询性能的影响
当执行带有 LIMIT 子句和大型表的 SELECT 查询时,设置较高的 LIMIT OFFSET偏移值会大大减慢查询的执行时间。当使用带有主键的 ORDER BY 子句时,这种行为尤其明显。
例如,考虑一个名为“large”的表,其中包含超过 1600 万条记录(大小为 2GB)。与具有较高偏移量的查询相比,如下所示的查询:
SELECT * FROM large ORDER BY `id` LIMIT 0, 30
执行速度要快得多,例如:
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
两个查询检索相同数量的记录(30 ),说明性能差异不是由于ORDER BY操作的开销造成的。
为了优化查询,建议尽量减少使用high限制偏移量。相反,请考虑使用 WHERE 子句根据已知标识符选择记录,这将导致偏移量为零。
例如,如果目标是检索最新 30 行,则可以使用以下查询:
SELECT * FROM large WHERE id > last_known_id LIMIT 0, 30
通过维护最后一个已知 ID (last_known_id) 的记录,这种方法允许查询始终从零偏移量开始,显着改进表演。
以上是为什么 MySQL 查询中的高 LIMIT OFFSET 值如此慢?的详细内容。更多信息请关注PHP中文网其他相关文章!