Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Perbarui tabel MySQL dalam potongan

Saya berakhir dengan prosedur yang tercantum di bawah ini. Ini berfungsi tetapi saya tidak yakin apakah itu efisien dengan semua kueri untuk mengidentifikasi rentang berurutan. Itu dapat dipanggil dengan argumen berikut (contoh):

call chunkUpdate('SET var=0','someTable','theKey',500000);

Pada dasarnya, argumen pertama adalah perintah update (misalnya sesuatu seperti "set x =..."), diikuti dengan nama tabel mysql, diikuti dengan kunci numerik (bilangan bulat) yang harus unik, diikuti dengan ukuran tabel. potongan untuk diproses. Kunci harus memiliki indeks untuk kinerja yang wajar. Variabel "n" dan pernyataan "pilih" dalam kode di bawah ini dapat dihapus dan hanya untuk debugging.

delimiter //
CREATE PROCEDURE chunkUpdate (IN cmd VARCHAR(255), IN tab VARCHAR(255), IN ky VARCHAR(255),IN sz INT)
BEGIN
  SET @sqlgetmin = CONCAT("SELECT MIN(",ky,")-1 INTO @minkey FROM ",tab); 
  SET @sqlgetmax = CONCAT("SELECT MAX(",ky,") INTO @maxkey FROM ( SELECT ",ky," FROM ",tab," WHERE ",ky,">@minkey ORDER BY ",ky," LIMIT ",sz,") AS TMP"); 
  SET @sqlstatement = CONCAT("UPDATE ",tab," ",cmd," WHERE ",ky,">@minkey AND ",ky,"<[email protected]");
  SET @n=1;

  PREPARE getmin from @sqlgetmin;
  PREPARE getmax from @sqlgetmax;
  PREPARE statement from @sqlstatement;

  EXECUTE getmin;

  REPEAT
    EXECUTE getmax; 
    SELECT cmd,@n AS step, @minkey AS min, @maxkey AS max;
    EXECUTE statement;
    set @[email protected];
    set @[email protected]+1;
  UNTIL @maxkey IS NULL
  END REPEAT; 
  select CONCAT(cmd, " EXECUTED IN ",@n," STEPS") AS MESSAGE;
END//



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO fetchSemua pasangan nilai kunci grup ke dalam array assoc

  2. Bagaimana cara melakukan penyisipan massal di mySQL menggunakan node.js

  3. Kumpulan koneksi MySQL Java tidak berfungsi

  4. Mengubah halaman koneksi ke PDO dan mendapatkan mysql_error()

  5. Performa REGEXP (bandingkan dengan LIKE dan =)