当前位置: 首页 > 面试题库 >

为什么MYSQL更高的LIMIT偏移量会减慢查询速度?

秦建元
2023-03-14
问题内容

简而言之,场景:一个拥有超过1600万条记录[2GB大小]的表。当使用ORDER BY * primary_key
*时,SELECT的LIMIT偏移量越高,查询速度就越慢

所以

SELECT * FROM large ORDER BY `id`  LIMIT 0, 30

花费不到

SELECT * FROM large ORDER BY `id` LIMIT 10000, 30

那只订购30条记录,并且无论如何都相同。因此,这不是ORDER BY的开销。
现在,当获取最新的30行时,大约需要180秒。如何优化该简单查询?


问题答案:

通常,较高的偏移量会使查询速度变慢,因为查询需要从第一OFFSET + LIMIT条记录中扣除(并且只提取其中的一条记录LIMIT)。该值越高,查询运行的时间越长。

查询无法直接进行,OFFSET因为,第一,记录的长度可能不同,第二,删除的记录可能会有间隙。它需要检查并计数其途中的每条记录。

假设idPRIMARY KEY一个的MyISAM表,你可以使用这一招加快步伐:

SELECT  t.*
FROM    (
        SELECT  id
        FROM    mytable
        ORDER BY
                id
        LIMIT 10000, 30
        ) q
JOIN    mytable t
ON      t.id = q.id

看到这篇文章:

  • MySQL ORDER BY / LIMIT性能:晚行查找


 类似资料:
  • 问题内容: 我试图弄清楚为什么我的查询之一变慢以及如何解决它,但是我对结果有些困惑。 我有一个约80列和775179行的表,并且正在执行以下请求: 在4.5秒内返回38行 删除时,我得到了很好的改进: 0.30秒内38行 但是,如果在不触摸的情况下删除,我会得到更好的结果: 0.10s(??)中的38行 为什么我的LIMIT这么饿? 继续前进 在尝试发送答案之前,我尝试了一些尝试,并注意到我有一个

  • 问题内容: 我有一个与此类似的表: 我想先更换2次出现的用用,然后4下出现,使生成的表如下所示: 当然,所讨论的表要大得多,因此出现的次数也会更多,因此手动编辑不是解决方案。 我想做这样的事情: 但是不幸的是,MySQL似乎在UPDATE查询中不支持OFFSET …有什么办法吗? 问题答案: 尝试这个: 然后

  • 问题内容: 使用大偏移量的mysql 时出现性能问题: 如果偏移量大于1,000,000,则操作非常缓慢。 我必须使用; 我不能使用类似的东西。 如何优化此语句以获得更好的性能? 问题答案: 也许您可以创建一个索引表,该表提供与目标表中的键相关的顺序键。然后,您可以将此索引表连接到目标表,并使用where子句更有效地获取所需的行。

  • `public class Main{private static Connection connect=null;private static Statement PreparedStatement=null;private static ResultSet ResultSet=null;

  • 本文向大家介绍为什么索引能提高查询速度?相关面试题,主要包含被问及为什么索引能提高查询速度?时的应答技巧和注意事项,需要的朋友参考一下 以下内容整理自: 地址: https://juejin.im/post/5b55b842f265da0f9e589e79 作者 :Java3y 先从 MySQL 的基本存储结构说起 MySQL的基本存储结构是页(记录都存在页里边): 各个数据页可以组成一个双向链表

  • 问题内容: 如标题所述,我想要一个解决方法… 干杯 问题答案: 您可能会希望将an添加到嵌套查询中。