我正在使用 mysql 并希望处理一个非常大的表,其主键由 10,000 个块中的 4 个部分组成(将数据编组到另一个系统)。当我进行处理时,数据库处于脱机状态,因此我不必担心任何修改。假设主键是 ( A
, B
, C
, D
) ,它们都是整数。我首先尝试使用LIMIT OFFSET
来实现这一点:
SELECT * FROM LargeTable ORDER BY (A, B, C, D) LIMIT 10000 OFFSET 0;
我在每次通话时将偏移量增加了 10000。当它到达表中较高的行时,这似乎变得非常缓慢。难道不能LIMIT OFFSET
有效地做到这一点吗?
然后我尝试了一种在复合主键上使用比较的不同方法。我可以像这样得到第一个块:
SELECT * FROM LargeTable ORDER BY (A, B, C, D) LIMIT 10000;
如果该块的最后一行有A = a
, B = b
, C = c
,D = d
然后我可以得到下一个块:
SELECT * FROM LargeTable
WHERE
A > a OR
(A = a AND B > b) OR
(A = a AND B = b AND C > c) OR
(A = a AND B = b AND C = c AND D > d)
ORDER BY (A, B, C, D) LIMIT 10000;
然后对每个块重复此操作。当我到达表中较高的行时,这似乎也大大减慢了。有一个更好的方法吗?我错过了一些明显的东西吗?