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

如何在LIMIT子句中加快具有大偏移量的MySQL查询?

田俊爽
2023-03-14
问题内容

使用大偏移LIMIT量的mysql 时出现性能问题SELECT

SELECT * FROM table LIMIT m, n;

如果偏移m量大于1,000,000,则操作非常缓慢。

我必须使用limit m, n; 我不能使用类似的东西id > 1,000,000 limit n

如何优化此语句以获得更好的性能?


问题答案:

也许您可以创建一个索引表,该表提供与目标表中的键相关的顺序键。然后,您可以将此索引表连接到目标表,并使用where子句更有效地获取所需的行。

#create table to store sequences
CREATE TABLE seq (
   seq_no int not null auto_increment,
   id int not null,
   primary key(seq_no),
   unique(id)
);

#create the sequence
TRUNCATE seq;
INSERT INTO seq (id) SELECT id FROM mytable ORDER BY id;

#now get 1000 rows from offset 1000000
SELECT mytable.* 
FROM mytable 
INNER JOIN seq USING(id)
WHERE seq.seq_no BETWEEN 1000000 AND 1000999;


 类似资料:
  • 问题内容: 我有一个使用以下PHP脚本构建的目录,该目录使用分页来获取每页1002个结果。问题在于,您进入页面的距离越远,加载页面所需的时间就越长。例如,第1页的加载速度明显快于10,000页。 我猜我在查询中做错了什么,而不仅仅是选择应限制的1002个结果,它还循环遍历了之前的所有结果。如果有人可以发布需要修复的代码,那就太好了! 感谢您的时间和帮助! 问题答案: 在大多数数据库中,带有偏移量的

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

  • 问题内容: 我正在写一个存储过程,其中有一个名为 my_size 的输入参数,它是一个 INTEGER 。我希望能够在语句的子句中使用它。显然,这不受支持,是否有解决方法? 问题答案: 通过搜索找到了这篇文章。我在下面粘贴了相关文本。 这是一个论坛帖子,显示了准备好的语句的示例,可让您将变量值分配给limit子句: http://forums.mysql.com/read.php?98,12637

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

  • 问题内容: 简而言之,场景:一个拥有超过1600万条记录[2GB大小]的表。当使用ORDER BY * primary_key *时,SELECT的LIMIT偏移量越高,查询速度就越慢 所以 花费不到 那只订购30条记录,并且无论如何都相同。因此,这不是ORDER BY的开销。 现在,当获取最新的30行时,大约需要180秒。如何优化该简单查询? 问题答案: 通常,较高的偏移量会使查询速度变慢,因为

  • 问题内容: 我在同一张图上绘制了多个seaborn点图。x轴是序数,而不是数字。每个点图的序数值都相同。我想将每个图稍微移到一边,pointplot(dodge = …)参数的方式是在单个图内的多条线内进行,但是在这种情况下,是要在彼此之上绘制多个不同图。我怎样才能做到这一点? 理想情况下,我想要一种适用于任何matplotlib图的技术,而不仅仅是专门针对海洋的技术。由于数据不是数字,因此很难为