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

Laravelを使用してmysqlで大きなサイズの更新クエリを処理する方法

    UPDATE users SET column = 'value' WHERE id = 1 OR id = 2 OR id = 3 ... OR id = 50000のようなクエリを作成することを考えている場合 またはWHERE id IN (1, 2, 3, ..., 50000) それならおそらく大きすぎるでしょう。それを要約するロジックを作成できれば、クエリが短縮され、MySQL側の処理が大幅に高速化されます。たぶんあなたはそれをWHERE id >= 1 AND id <= 50000にすることができます 。

    それがオプションでない場合は、バーストで行うことができます。おそらく、CSVファイルの行をループして、大きなWHERE id = 1 OR id = 2...としてクエリを作成します。 クエリを実行し、100行程度(またはそれでも大きすぎる場合は50行)ごとにクエリを実行して、次の50IDに対して新しいクエリを開始します。

    または、50.000個のシングルUPDATEを実行することもできます データベースに対するクエリ。正直なところ、テーブルがインデックスを適切に使用している場合、ほとんどの最新のWebサーバーでは50.000クエリの実行に数秒しかかかりません。最も忙しいサーバーでさえ、1分以内にそれを処理できるはずです。

    ファイルをチャンクで読み取る場合は、PHPの基本的なファイルアクセス関数を使用できます。

    $file = fopen('/path/to/file.csv', 'r');
    
    // read one line at a time from the file (fgets reads up to the
    // next newline character if you don't provide a number of bytes)
    while (!feof($file)) {
        $line = fgets($file);
    
        // or, since it's a CSV file:
        $row = fgetcsv($file);
        // $row is not an array with all the CSV columns
    
        // do stuff with the line/row
    }
    
    // set the file pointer to 60 kb into the file
    fseek($file, 60*1024);
    
    // close the file
    fclose($file);
    

    これにより、ファイル全体がメモリに読み込まれることはありません。 Laravelがファイルを処理する独自の方法を持っているかどうかはわかりませんが、これが基本的なPHPでそれを行う方法です。



    1. SQLサーバーで日付データ型を使用するにはどうすればよいですか?

    2. IDENT_CURRENT()を使用して、SQLServerのID列の現在のID値を返します

    3. SQLで重複を削除する方法

    4. PHP / MySQLでの地理検索(距離)(パフォーマンス)