लोड डाटा इनइमर और विस्तारित INSERT प्रत्येक के अपने अलग फायदे हैं।
LOAD DATA INFILE एक एकल ऑपरेशन में टेबल डेटा के बड़े पैमाने पर लोडिंग के लिए डिज़ाइन किया गया है, साथ ही घंटी और सीटी बजाने के लिए:
- प्रारंभिक रेखाएँ लंघन
- विशिष्ट कॉलमों को छोड़ना
- विशिष्ट कॉलम बदलना
- लोड हो रहा है विशिष्ट कॉलम
- डुप्लिकेट कुंजी मुद्दों को संभालना
पार्सिंग के लिए कम ओवरहेड की आवश्यकता होती है
दूसरी तरफ, यदि आप 1,000,000 पंक्तियों के बजाय केवल 100 पंक्तियों का आयात कर रहे हैं, तो विस्तारित INSERT समझदार है।
ध्यान दें कि mysqldump को डेटा के साथ-साथ टेबल डिज़ाइन के लिए विस्तारित INSERT के चारों ओर डिज़ाइन किया गया था क्योंकि यह प्रति INSERT सैकड़ों या हजारों पंक्तियों का इंजेक्शन करता है। लोड डाटा आईनॉर्म हमेशा स्कीमा और डेटा के बीच एक शारीरिक द्वंद्व बनाता है।
एक अनुप्रयोग बिंदु-से-दृश्य से, LOAD DATA INFILE भी विस्तारित INSERT की तुलना में स्कीमा परिवर्तन के लिए अधिक असंवेदनशील है।
LOAD DATA INFILE के उपयोग से कोई भी व्यक्ति अच्छे, बुरे और बदसूरत पर आगे-पीछे जा सकता है। कोई फर्क नहीं पड़ता कि आप किस तकनीक का उपयोग करते हैं, आपको हमेशा बल्क_इन्टर_बफ़र_साइज़ सेट करना चाहिए । क्यूं कर?
MySQL दस्तावेज़ीकरण के अनुसार बल्क_इन्टर_बफ़र_साइज़ पर:
MyISAM INSERT के लिए बड़ी मात्रा में ट्री-इन्सर्ट बनाने के लिए एक विशेष ट्री-जैसे कैश का उपयोग करता है ... चयन करें, INSERT ... VALUES (...), ... (...), और LOAD DATA INFILE जब nonempty में डेटा जोड़ते हैं। टेबल। यह चर बाइट ट्री के आकार को प्रति धागे बाइट्स में सीमित करता है। इसे 0 पर सेट करना इस अनुकूलन को अक्षम करता है। डिफ़ॉल्ट मान 8MB है।
सालों से, मैंने क्लाइंट को यह सेट नहीं करने के बाद क्लाइंट को देखा है और इसे 8 एमबी पर छोड़ दिया है। फिर, जब वे LOAD DATA INFILE का उपयोग करने या mysqldumps को आयात करने का निर्णय लेते हैं, तो वे कुछ गलत समझ सकते हैं। मैं आमतौर पर इसे मध्यम 256M पर सेट करने की सलाह देता हूं। कुछ मामलों में, 512M।
एक बार जब आपके पास एक बड़ा पर्याप्त थोक INSERT बफर होता है, तो तकनीक का उपयोग करके अकादमिक प्रदान किया जाता है और व्यक्तिगत पसंद के लिए उबलता है। उन अनुप्रयोगों के लिए जहां आप मांग पर सिर्फ 100 पंक्तियों में थोक करते हैं, विस्तारित INSERT के साथ चिपके रहते हैं।
सभी निष्पक्षता में, LOAD DATA INFILE तेजी से कह रहा है कि सामान्य INSERT स्टेटमेंट मुख्य रूप से लोड किए गए स्टेटमेंट की तरह है क्योंकि कॉन्फ़िगरेशन पर ध्यान नहीं दिया जाता है। भले ही आप LOAD DATA INFILE और विस्तारित INSERTs के बीच एक उचित बल्क_insert_buffer_size के बीच एक बेंचमार्क सेट करते हैं, प्रत्येक पंक्ति को पार्स करने पर सहेजे गए नैनोसेकेंड केवल LOAD DATA INFILE के पक्ष में नाममात्र परिणाम प्राप्त कर सकते हैं।
आगे बढ़ो और इसे my.cnf में जोड़ें
[mysqld]
bulk_inset_buffer_size=256M
विस्तारित INSERT लॉन्च करने से पहले आप इसे अपने सत्र के लिए भी सेट कर सकते हैं
SET bulk_insert_buffer_size= 1024 * 1024 * 256;
UPDATE 2012-07-19 14:58 EDT
चीजों को परिप्रेक्ष्य में रखने के लिए, बल्क इंसर्ट बफ़र केवल MyISAM तालिकाओं को लोड करने के लिए उपयोगी है, न कि InnoDB। मैंने थोक लोडिंग InnoDB पर एक और हालिया पोस्ट लिखा: हार्ड ड्राइव पर प्रतीक्षा कर रहे शिशु अटक से मैसकल लोड
LOAD DATA INFILE
: MySQL के साथ उच्च गति आवेषण पर एक लेख लिखा । नीचे पंक्ति: आपLOAD DATA INFILE
विस्तारित आवेषण का उपयोग करने के प्रदर्शन का 65% प्राप्त कर सकते हैं । मुझे आधुनिक हार्डवेयर पर 240,000 आवेषण / सेकंड मिले।