您可以尝试使用该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;