如何“限制50000,1”?

时间:2010-10-20 12:06:29

标签: mysql

那么,LIMIT 50000,1不会有效吗?那怎么来的?如果需要几行之后的行怎么办?

我在http://www.mysqlperformanceblog.com/2006/09/01/order-by-limit-performance-optimization/

阅读

2 个答案:

答案 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之间的位置   任何效率都相同   位置(只要它被索引)