2010-10-20 68 views

回答

4

读它,如果你指定一个LIMIT,MySQL将处理没有限制查询,然后只预读,直到它到达极限点。

换句话说,如果指定LIMIT 50000,1,该数据库将有阅读50001个记录只是为了让你感兴趣的一个。

如果限低,这其实并不重要,但具有很高的限制,它会为查询增加大量的时间。

所有这一切都在你提供的链接中(这似乎是一个很好的资源)。

如果你正在做这种事情,并且需要在大量页面上进行性能测试,那么最好是进行更直接的查询,例如查询排序列的位置大于上一个条目的位置页。当然,这种方法也有缺陷,但它的一件事情会比LIMIT 50000,1更快(只要你有一个索引,当然)

2

它说不通,它只是表现可能会受损。正如你所看到的,作者建议你可以记住最后一个ID,并且做一个where id > last_id limit 20而不仅仅是limit 5000, 20

谨防大的限制使用索引来 排序是有效的,如果你需要先 几行,即使一些额外的过滤 发生,所以你需要扫描更多 行通过索引然后通过LIMIT要求。 但是,如果您正在处理LIMIT 具有较大偏移效率的查询, 将受到影响。 LIMIT 1000,10可能是 比LIMIT 0,10慢。它 是真的,大多数用户不会进一步 比结果10页,但 搜索引擎机器人可能很好做 所以。我看过在我的项目中看到200 + 页的漫游器。同样对于很多网络 网站未能照顾到这个 提供了一个非常简单的任务来启动一个 DOS攻击 - 请求页面有一些 大数从几个连接和 就足够了。如果你不做 其他任何事情请确保你阻止 页面号太大的请求。

在某些情况下,例如,如果结果 是静态的,可能是有意义的 预先计算的结果,这样你就可以查询 他们的职位。因此,而不是 查询与LIMIT 1000,10,你将不得不 WHERE 1000和1009 这对于任何 位置相同的效率(只要它被索引)

之间的位置