एक INSERT कथन में कई मान सेट के साथ बल्क इन्सर्ट
MySQL एक ही INSERT कथन में अल्पविराम से अलग किए गए कई मान सेट डालने का समर्थन करता है। यह अलग-अलग INSERT कथनों की तुलना में बहुत तेज़ है।
सिंटैक्स
INSERT INTO टेबल_नाम (कॉलम1, कॉलम2, ...) VALUES (मान1, मान2, ...), (मान1, मान2, ...), ...;
उदाहरण
1. टेबल बनाएं
mysql> CREATE TABLE InsertMultipleRowsDemo (
-> Id INT,
-> Name VARCHAR(200),
-> Age INT
-> );
2. एक कथन में 5 पंक्तियाँ डालें
mysql> INSERT INTO InsertMultipleRowsDemo(Id, Name, Age) VALUES
-> (1, 'John', 23),
-> (2, 'Carol', 24),
-> (3, 'Johnson', 21),
-> (4, 'Smith', 20),
-> (5, 'David', 26);
आउटपुट: Query OK, 5 rows affected (0.31 sec) Records: 5 Duplicates: 0 Warnings: 0
3. सत्यापित करें
mysql> SELECT * FROM InsertMultipleRowsDemo;
+------+---------+------+ | Id | Name | Age | +------+---------+------+ | 1 | John | 23 | | 2 | Carol | 24 | | 3 | Johnson | 21 | | 4 | Smith | 20 | | 5 | David | 26 | +------+---------+------+
प्रदर्शन लाभ
- नेटवर्क राउंड-ट्रिप कम: एक कथन बनाम कई
- पार्सिंग ओवरहेड कम: एक बार पार्स, कई बार निष्पादित
- ट्रांजैक्शन लॉग दक्षता: InnoDB में एक ट्रांजैक्शन के रूप में लॉग किया जाता है
बड़े बल्क इन्सर्ट के लिए सर्वोत्तम अभ्यास
- बैच आकार: प्रति कथन 1000-5000 पंक्तियाँ (पैकेट आकार सीमा
max_allowed_packetसे बचने के लिए) - इंडेक्स अक्षम करें (यदि संभव हो):
ALTER TABLE टेबल DISABLE KEYS(केवल MyISAM), इन्सर्ट के बादENABLE KEYS - LOAD DATA INFILE का उपयोग करें: CSV/TSV फ़ाइलों से लोड करने के लिए और भी तेज़
- ट्रांजैक्शन: स्पष्ट ट्रांजैक्शन में लपेटें यदि ऑटोकमिट बंद है
IGNORE और ON DUPLICATE KEY UPDATE
-- डुप्लिकेट को अनदेखा करें INSERT IGNORE INTO टेबल (कॉलम) VALUES (...), (...); -- डुप्लिकेट पर अपडेट करें INSERT INTO टेबल (कॉलम) VALUES (...), (...) ON DUPLICATE KEY UPDATE कॉलम = VALUES(कॉलम);