Mysql
 sql >> база данни >  >> RDS >> Mysql

Актуализирайте MySQL таблицата на парчета

Завърших с процедурата, описана по-долу. Работи, но не съм сигурен дали е ефективно с всички заявки за идентифициране на последователни диапазони. Може да се извика със следните аргументи (пример):

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

По принцип първият аргумент е командата за актуализиране (напр. нещо като "set x =..."), последвано от името на таблицата mysql, последвано от цифров (цяло число) ключ, който трябва да бъде уникален, последван от размера на парчета за обработка. Ключът трябва да има индекс за разумна производителност. Променливата "n" и операторите "select" в кода по-долу могат да бъдат премахнати и са само за отстраняване на грешки.

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. Импортиране на GeoLite2 на MaxMind в MySQL

  2. Как да получите всички данни от 2 таблици с помощта на външен ключ

  3. как да създадете тригер за конкатенация на полета

  4. Как да промените пътя на mysql услугите

  5. Маршрутизиране с AngularJS и Slim PHP