Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL तालिका को टुकड़ों में अपडेट करें

मैं नीचे सूचीबद्ध प्रक्रिया के साथ समाप्त हुआ। यह काम करता है लेकिन मुझे यकीन नहीं है कि यह लगातार श्रेणियों की पहचान करने के लिए सभी प्रश्नों के साथ कुशल है या नहीं। इसे निम्नलिखित तर्कों (उदाहरण) के साथ कहा जा सकता है:

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

मूल रूप से, पहला तर्क अद्यतन कमांड है (उदाहरण के लिए "सेट x =..."), उसके बाद MySQL तालिका का नाम, उसके बाद एक संख्यात्मक (पूर्णांक) कुंजी जिसे अद्वितीय होना चाहिए, उसके बाद आकार संसाधित किए जाने वाले टुकड़े। उचित प्रदर्शन के लिए कुंजी में एक सूचकांक होना चाहिए। नीचे दिए गए कोड में "n" वेरिएबल और "सेलेक्ट" स्टेटमेंट को हटाया जा सकता है और ये केवल डिबगिंग के लिए हैं।

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. स्प्रिंग बूट के application.properties में env वेरिएबल का उपयोग करना

  2. JPA 2.1 का उपयोग करके EnumSet को mysql सेट पर मैप करना

  3. मैं डेटाबेस संचालित परमालिंक कैसे बनाऊं?

  4. MySQL ऑर्डर द्वारा [कस्टम सेट फ़ील्ड मान]

  5. पंक्ति दर पंक्ति के बजाय MySQL में संपूर्ण तालिका धारण करने के लिए अद्यतन का चयन करें