那么,LIMIT 50000,1
不会有效吗?那怎么来的?如果需要几行之后的行怎么办?
我在http://www.mysqlperformanceblog.com/2006/09/01/order-by-limit-performance-optimization/
阅读答案 0 :(得分:4)
如果您指定LIMIT
,MySQL将处理没有限制的查询,然后只需提前读取,直到达到限制点。
换句话说,如果您指定LIMIT 50000,1
,则数据库必须读取50001条记录才能获得您感兴趣的记录。
如果限制很低,这并不重要,但是有一个上限,它会为查询添加大量时间。
所有这些都包含在您提供的链接中(这似乎是一个非常好的资源)。
如果您正在执行此类操作并且需要在大量页面上执行操作,那么最好还是进行更直接的查询,例如查询排序列大于上一页上的最后一个条目的位置。当然,这种方法也有陷阱,但它会比LIMIT 50000,1
更快(只要你有一个索引)
答案 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进行查询 在1000和1009之间的位置 任何效率都相同 位置(只要它被索引)