使用PHP分页时MySQL大表性能问题

dat*_*.io 6 mysql database performance

有一个巨大的mysql表,有300,000条记录,并希望以这种方式用PHP查询PHP中的记录(尽管这里不是重点):

SELECT * FROM `table` LIMIT 250000, 100 
Run Code Online (Sandbox Code Playgroud)

在记录的后半部分可能会非常缓慢,特别是在接近表格末尾时(LIMIT开始非常大).我的猜测是MySQL在将结果舀到我之前必须一直计算到250000?

那么如何解决这种或任何其他分页方法可能会更快?谢谢!

cle*_*tus 5

确保您使用索引,否则它将进行全表扫描。您可以查看执行计划来验证这一点,或者使用子句ORDER BY(在索引列上)强制解决该问题。这里有更多信息

您的表并没有那么大,只有 300k 行。然而,接近表末尾时存在性能问题。唯一真正的解决方案是伪造限制条款。有一个自动递增字段,将行编号从 1 到 300,000,然后执行以下操作:

SELECT *
FROM mytable
WHERE field BETWEEN 250000 and 250100
Run Code Online (Sandbox Code Playgroud)

或类似的。如果您经常删除行,这可能会出现问题或不可能,但我倾向于发现较旧的数据往往变化较少,因此您可以通过使用LIMIT前 100,000 行和除此之外的代理分页列来对其进行一定程度的优化。