有一个包含大约 300,000 条记录的巨大 mysql 表,并希望以这种方式使用查询在 PHP 中分页记录(虽然不是这里的重点):
SELECT * FROM `table` LIMIT 250000, 100
记录的后半部分可能会很慢,尤其是在接近表末尾时(LIMIT 开始非常大)。我的猜测是 MySQL 必须一直倒数到 250000 才能将结果提供给我?
那么如何解决这个或任何其他可能更快的分页方法?谢谢!
最佳答案
确保您使用的是索引,否则它会进行全表扫描。您可以查看执行计划来验证这一点,或者通过使用 ORDER BY
子句(在索引列上)来强制执行此问题。这是 more information .
您的表并没有那么大,只有 30 万行。然而,接近表格末尾存在性能问题。唯一真正的解决办法是伪造限制条款。有一个自动递增字段,将行编号从 1 到 300,000,然后执行:
SELECT *
FROM mytable
WHERE field BETWEEN 250000 and 250100
或类似的。如果您经常删除行,这可能会有问题或不可能,但我倾向于发现较旧的数据往往变化较少,因此您可以通过对前 100,000 行使用 LIMIT
和代理分页来稍微优化它列之外。
关于使用 PHP 分页时 MySQL 大表性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/741172/