随着 LIMIT 偏移量的增加,查询性能会下降
数据库在使用带偏移量的 LIMIT 时经常会遇到性能瓶颈,尤其是在处理大型表时。当使用具有高偏移值的 LIMIT OFFSET 子句和 ORDER BY 时,这个问题在 MySQL 中尤其明显。
一个这样的例子是名为“large”的表,包含超过 1600 万条记录,占用大约 2GB 的存储空间。执行具有低偏移值的查询:
SELECT * FROM large ORDER BY `id` LIMIT 0, 30
与具有较高偏移量的类似查询相比,完成速度明显更快:
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
尽管两个查询检索相同数量的记录( 30), ORDER BY 的开销不考虑性能差异。
优化解决方案
要解决此问题并提高性能,可以采用不同的方法。我们可以保存上一个数据集的最后一个 ID,并在后续查询中添加 WHERE 条件,而不是在循环中递增偏移量来收集大量数据:
SELECT * FROM large WHERE id > lastId LIMIT 0, 30
通过保持零偏移并查询超出最后一个已知ID的记录,可以极大地提高性能。
以上是为什么 MySQL 中的 LIMIT 偏移量过大会导致查询性能下降?的详细内容。更多信息请关注PHP中文网其他相关文章!