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

MySql तालिका से डुप्लिकेट पंक्तियों को हटाना

आपके पास कई विकल्प हैं।

DB को काम करने दें

अद्वितीय अनुक्रमणिका के साथ अपनी तालिका की एक प्रति बनाएँ - और फिर उसमें अपनी स्रोत तालिका से डेटा डालें:

CREATE TABLE clean LIKE pst_nw;
ALTER IGNORE TABLE clean ADD UNIQUE INDEX (add1, add2, add3, add4);
INSERT IGNORE INTO clean SELECT * FROM pst_nw;
DROP TABLE pst_nw;
RENAME TABLE clean pst_nw;

चीजों को इस तरह से करने का लाभ यह है कि आप अपनी स्रोत तालिका को छोड़ने से पहले सत्यापित कर सकते हैं कि आपकी नई तालिका सही है। नुकसान यह है कि यह दोगुने स्थान लेता है और (अपेक्षाकृत) निष्पादित करने में धीमा है।

DB को #2 काम करने दें

आप ऐसा करके भी मनचाहा परिणाम प्राप्त कर सकते हैं:

set session old_alter_table=1;
ALTER IGNORE TABLE pst_nw ADD UNIQUE INDEX (add1, add2, add3, add4);

इग्नोर फ़्लैग .. को नज़रअंदाज़ किया जा रहा है

यहां लाभ यह है कि अस्थायी तालिका के साथ कोई गड़बड़ नहीं है - नुकसान यह है कि आपको यह जांचने के लिए नहीं मिलता है कि आपका अपडेट ठीक वही करता है जो आप इसे चलाने से पहले उम्मीद करते हैं।

उदाहरण:

 CREATE TABLE `foo` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `one` int(10) DEFAULT NULL,
  `two` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
)

insert into foo values (null, 1, 1);
insert into foo values (null, 1, 1);
insert into foo values (null, 1, 1);

select * from foo;
+----+------+------+
| id | one  | two  |
+----+------+------+
|  1 |    1 |    1 |
|  2 |    1 |    1 |
|  3 |    1 |    1 |
+----+------+------+
3 row in set (0.00 sec)

set session old_alter_table=1;
ALTER IGNORE TABLE foo ADD UNIQUE INDEX (one, two);

select * from foo;
+----+------+------+
| id | one  | two  |
+----+------+------+
|  1 |    1 |    1 |
+----+------+------+
1 row in set (0.00 sec)

डीबी के बाहर इस तरह का काम न करें

विशेष रूप से 40 मिलियन पंक्तियों के साथ डीबी के बाहर ऐसा कुछ करने में बहुत अधिक समय लगने की संभावना है, और यह बिल्कुल भी पूरा नहीं हो सकता है। कोई भी समाधान जो डीबी में रहता है वह तेज़ और अधिक मजबूत होगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. $stmt->fetch(PDO::FETCH_ASSOC) का उपयोग करते समय डेटा कैसे आउटपुट करें;

  2. दो कॉलम मानों को दो तालिकाओं के बीच स्वैप करें

  3. mysql_fetch_assoc ():आपूर्ति किया गया तर्क php . में मान्य MySQL परिणाम संसाधन नहीं है

  4. MySQL कनेक्शन कैरेक्टर सेट समस्याएं

  5. MySQL में एक पूर्णांक अनुक्रम उत्पन्न करें