慢MySQL限制选择

时间:2011-09-11 11:47:54

标签: php mysql query-optimization limit

  

可能重复:
  Why does MYSQL higher LIMIT offset slow the query down?

我的另一个帖子由于它是重复的而被关闭了,但副本,根本没有帮助我,所以我也没有看到关闭这个的原因!

我有一个页面,我希望按照每个帖子的投票数量从上到下对帖子进行排序。

我有数百万条记录,查询速度非常慢。得到结果需要很短的时间。

这很好:

SELECT `id` FROM `table` ORDER BY `votes` LIMIT 0,20;

这需要很长时间:

SELECT `id` FROM `table` ORDER BY `votes` LIMIT 100000,20;

我甚至没有谈论将它设置为1,000,000甚至更多。

关于如何加快速度的任何想法? 我尝试使用Why does MYSQL higher LIMIT offset slow the query down?中的代码 但它也没有帮助。 你们有什么建议我可以达到相同的结果,但也许使用PHP?还是一些更好的查询?

1 个答案:

答案 0 :(得分:2)

此查询的问题在于它首先需要找到前100000的内容,然后才能获取100000-1000020。

在我们的案例中,我们处理的是图库和页面,我们只是在x页面后阻止了访问;从而完全避免了这个问题。

如果您还没有votes的索引,请从那里开始;但我猜你已经做过了(我希望如此!)。您还可以选择其他一些标准吗?你可以改为降序吗?还有其他方法可以将行数从100000减少到更低的值吗?

如果一切都失败了,你将不得不寻找其他解决方案;您可能需要对从该查询返回的内容进行非规范化和预生成。也许你需要缓存所有结果并运行一个预热脚本。

希望这会对你有所帮助..