बड़ी संख्या में पंक्तियाँ डालने का सबसे तेज़ तरीका एक ही INSERT स्टेटमेंट में कई मान सूचियाँ देना है। यह नेटवर्क राउंड-ट्रिप और पार्सिंग ओवरहेड को कम करता है।
सिंटैक्स
INSERT INTO yourTableName VALUES (NULL, 'val1', 'val2'), (NULL, 'val1', 'val2'), ... N पंक्तियाँ;
टेबल बनाएं
mysql> CREATE TABLE DemoTable1839 (
ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientName VARCHAR(20),
ClientAge INT
);
एक INSERT में 8 पंक्तियाँ डालें
mysql> INSERT INTO DemoTable1839 VALUES (NULL,'Chris',29),(NULL,'Chris',29),(NULL,'Chris',29),(NULL,'Chris',29), (NULL,'Chris',29),(NULL,'Chris',29),(NULL,'Chris',29),(NULL,'Chris',29); Query OK, 8 rows affected (0.00 sec)
परिणाम
+----------+------------+-----------+ | ClientId | ClientName | ClientAge | +----------+------------+-----------+ | 1 | Chris | 29 | | 2 | Chris | 29 | | 3 | Chris | 29 | | 4 | Chris | 29 | | 5 | Chris | 29 | | 6 | Chris | 29 | | 7 | Chris | 29 | | 8 | Chris | 29 | +----------+-----------+
प्रदर्शन युक्तियाँ
- बैच आकार: 1000-5000 पंक्तियाँ प्रति INSERT इष्टतम (अधिकतम पैकेट आकार
max_allowed_packetध्यान में रखें)। - ट्रांजैक्शन: कई INSERT को
START TRANSACTION; ... COMMIT;में लपेटें। - इंडेक्स अक्षम करें: बड़ी लोड के लिए
ALTER TABLE ... DISABLE KEYS(केवल MyISAM) फिरENABLE KEYS। LOAD DATA INFILECSV/TSV के लिए सबसे तेज़।
तुलना
| विधि | सापेक्ष गति |
|---|---|
| एकल INSERT प्रति पंक्ति | धीमा (बेसलाइन) |
| बहु-मूल्य INSERT (बैच) | ~10-50x तेज़ |
| LOAD DATA INFILE | ~100x तेज़ |