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

标签 mysql database performance

有一个包含大约 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/

相关文章:

sql-server - SQL中如何存储DropDownList信息

mysql - 改进此查询以从不同的表中获取数据

c# - SQLGetInfo - 如何使用此函数

c# - 从代码生成映射 View - EF6

python - 在 Django 中缓存包含一些常量的函数

php - 在 PHP MySQL 查询中无法搜索以获取 OR 语句

php - 当用户更新其他表时,使用 php 自动更新 MYSQL 表

mysql - 加快 IP 查找的双重/嵌套选择查询

mysql - 每个 where 子句创建列

php - 使用逗号分隔的字符串搜索