LIMIT
を使用してみてください 特徴。これを行う場合:
SELECT * FROM MyTable ORDER BY whatever LIMIT 0,1000
最初の1,000行を取得します。最初のLIMIT
値(0)は、結果セットの開始行を定義します。インデックスはゼロなので、0は「最初の行」を意味します。 2番目のLIMIT
valueは、取得する行の最大数です。次の数セットの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.
各チャンクの後に制限値を計算し、結果の終わりを確認するロジックを作成するのはあなたに任せます。また、1,000レコードよりもはるかに大きなチャンクをお勧めします。それは私が空中から選んだ数字です。
最後に、完了したら一時テーブルを削除することをお勧めします。
DROP TEMPORARY TABLE MyChunkedResult;