sql >> データベース >  >> RDS >> Mysql

MySQL:チャンクで大きな選択を取得します

    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;
    


    1. CSVとMySQLのパフォーマンス

    2. SQLServerバックアップチェック

    3. SQLServer2008の空の文字列とスペース

    4. MySQL空間拡張を使用して、円内のポイントを選択します