【问题标题】:late row lookup issue with Limit and Offset限制和偏移的延迟行查找问题
【发布时间】:2019-05-22 10:18:48
【问题描述】:

我想使用限制和偏移量进行选择查询,我使用本文中的一个示例

https://explainextended.com/2009/10/23/mysql-order-by-limit-performance-late-row-lookups/

但我总是只从我的表中获取一个 id 的数据并且有 1000 行。

我的查询有什么问题? 例如:

  • id 57 姓名约翰;
  • id 57 姓名约翰;

等等……

SELECT d.id, drivers 
FROM ( SELECT id FROM drivers LIMIT 1000 OFFSET 1000) ds
JOIN drivers d ON d.id = ds.id;

【问题讨论】:

  • OFFSET 1000 将只返回第 1000 条记录。删除它以获得前 1000 条记录。
  • 请注意,没有 ORDER BY 的 LIMIT 是毫无意义的(我敢打赌@Quassnoi 有一个 ORDER BY 子句)
  • 我遇到了与 OFFSET 0 相同的问题
  • 添加 ORDER BY,但仍然只得到一个 id SELECT d.id, drivers FROM ( SELECT id FROM drivers ORDER BY id LIMIT 1000 OFFSET 0) ds JOIN drivers d ON d.id = ds.id ORDER BY d.id;

标签: mysql


【解决方案1】:

根据参考博客,您的查询应包含 order by desc,因此查询将如下所示

SELECT d.id, drivers 
FROM ( SELECT id FROM drivers ORDER BY id DESC LIMIT 1000 OFFSET 1000) ds
JOIN drivers d ON d.id = ds.id;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-21
    • 2018-01-23
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多