当前位置:  开发笔记 > 编程语言 > 正文

MySQL:通过块检索大的选择

如何解决《MySQL:通过块检索大的选择》经验,为你挑选了1个好方法。



1> Ed Gibbs..:

您可以尝试使用该LIMIT功能.如果你这样做:

SELECT * FROM MyTable ORDER BY whatever LIMIT 0,1000

你会获得前1000行.第一个LIMIT值(0)定义结果集中的起始行.它是零索引的,所以0表示"第一行".第二个LIMIT值是要检索的最大行数.要获得接下来的几组1,000,请执行以下操作:

SELECT * FROM MyTable ORDER BY whatever LIMIT 1000,1000 -- rows 1,001 - 2,000
SELECT * FROM MyTable ORDER BY whatever LIMIT 2000,1000 -- rows 2,001 - 3,000

等等.当SELECT没有返回任何行时,你就完成了.

但这本身并不足够,因为在您一次处理1K行时对表进行的任何更改都会导致顺序失效.要及时冻结结果,首先将结果查询到临时表中:

CREATE TEMPORARY TABLE MyChunkedResult AS (
  SELECT *
  FROM MyTable
  ORDER BY whatever
);

附注:确保事先不存在临时表是个好主意:

DROP TEMPORARY TABLE IF EXISTS MyChunkedResult;

无论如何,一旦临时表到位,从那里拉出行块:

SELECT * FROM MyChunkedResult LIMIT 0, 1000;
SELECT * FROM MyChunkedResult LIMIT 1000,1000;
SELECT * FROM MyChunkedResult LIMIT 2000,1000;
.. and so on.

我将留给你创建逻辑,计算每个块后的限制值并检查结果的结束.我还推荐比1000条记录更大的块; 这只是我从空中挑选的一个数字.

最后,在完成后删除临时表是一种很好的形式:

DROP TEMPORARY TABLE MyChunkedResult;

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有