2011-11-21 13 views
18

मेरे MySQL डेटाबेस में, एक तालिका है जिसमें 2,000,000 रिकॉर्ड हैं। अब, मैं इस तालिका में एक और 6,000,000 नए रिकॉर्ड डालना चाहता हूं।MySQL अक्षम और सक्षम कुंजी

प्रविष्टि में तेजी लाने के लिए, मैं हालांकि मैं/अक्षम का उपयोग करना चाहिए निम्नलिखित की तरह कुंजी सक्षम:

ALTER TABLE cars DISABLE KEYS; 

INSERT INTO cars ... 
... 
... 
INSERT INTO cars ... 

ALTER TABLE search_all_values ENABLE KEYS; 

OPTIMIZE TABLE cars; 

लेकिन मैं किसी भी तरह कि लग रहा है, अक्षम/खाली टेबल के लिए प्रयोग की जाने वाली अधिक मतलब होगा कुंजी सक्षम प्रविष्टि।

मेरे मामले में, मेरे पास तालिका में पहले से 2,000,000 रिकॉर्ड हैं, जब ENABLE KEYS, mysql सभी इंडेक्स (मौजूदा रिकॉर्ड और नए जोड़े गए रिकॉर्ड सहित) को फिर से बना देगा जो शायद एक कुशल डेटा सम्मिलन नहीं करेगा मेरे मामले में एक पूरा। जैसा कि सभी अनुक्रमित फिर से बनाते हैं लंबे समय का समय लगेगा और शायद ऐसा नहीं करता है OPTIMIZE TABLE

मैं के बारे में मैं सही हूँ और मैं अपने मामले में एक कुशल डेटा प्रविष्टि कर सकते हैं अपनी राय पूछना चाहते हैं?

+0

क्या आप निश्चित हैं कि कुंजी अपडेट एक बाधा है? – abcde123483

+1

यह मेरी चिंता है और यहां कोई भी चिंता है http://forums.mysql.com/read.php?21,68820,68939#msg-68939 – Mellon

+0

वैसे भी, उन इंडेक्स को फिर से सक्षम करने के बाद बनाया जाएगा । पंक्ति/पंक्ति के बजाए एक थोक डालने का प्रयास करें और अपडेट आंकड़े भी करें और देखें कि इससे कुछ भी सुधारता है या नहीं। – Rahul

उत्तर

1

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

I ' बाद के लिए जाओ, अपनी चाबियाँ अक्षम नहीं। यदि आप सर्वर पर ज्यादा जोर देने से डरते हैं, तो आप बैचों में डालने का प्रयास कर सकते हैं, उदा। प्रति मिनट केवल एक निश्चित मात्रा में आवेषण।

+0

@ mlitn, डेटा सम्मिलन के बाद तालिका को अनुकूलित करने के बारे में, क्या यह चरण आवश्यक है? – Mellon

39

आपको निश्चित रूप से इंजन प्रकार के आधार पर अपना दृष्टिकोण चुनना है ... for MyISAM या for InnoDB अनुकूलित करना।

हमने हाल ही में डेटा सम्मिलित करने के लिए विभिन्न तरीकों की तुलना में एक बेंचमार्क चलाया और सम्मिलन से पहले समय माप लिया और जब तक सभी सूचकांक पूरी तरह से बहाल नहीं हो जाते। यह एक खाली टेबल पर था, लेकिन हमने 10 मिलियन पंक्तियों का उपयोग किया।

LOAD DATA INFILE और ALTER TABLE ... ENABLE/DISABLE KEYS के साथ MyISAM हमारे परीक्षण में (विंडोज 7 सिस्टम, MySQL 5.5.27 पर - अब हम एक लिनक्स सिस्टम पर कोशिश कर रहे हैं) में हाथ मिलाया।

सक्षम और अक्षम कुंजी InnoDB के लिए काम नहीं करती है, यह केवल MyISAM है। InnoDB के लिए, SET AUTOCOMMIT = 0; SET FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0; का उपयोग करें यदि आप सुनिश्चित हैं कि आपके डेटा में डुप्लिकेट नहीं हैं (अपलोड पूर्ण होने के बाद उन्हें 1 पर सेट करना न भूलें)।

मुझे नहीं लगता कि आपको थोक प्रविष्टि के बाद OPTIMIZE TABLE की आवश्यकता है - MySQL पंक्तियों को प्रविष्टि द्वारा आदेश दिया जाता है और सूचकांक को फिर भी बनाया जाता है। थोक डालने से कोई "अतिरिक्त विखंडन" नहीं होता है।

अगर मैंने तथ्यात्मक त्रुटियां की हैं तो टिप्पणी करने के लिए स्वतंत्र महसूस करें।

अद्यतन: हमारे हालिया और पूर्ण परीक्षण परिणामों के अनुसार, अक्षम/सक्षम कुंजी की सलाह गलत है।

एक सहकर्मी एक कार्यक्रम सी अलग-अलग परीक्षण चला था - InnoDB/MyISAM पहले से भरे हुए और खाली, चयन और सम्मिलन के साथ एक मेज, LOAD DATA LOCAL, INSERT INTO, REPLACE INTO और UPDATE साथ गति "घने" और "खंडित" टेबल पर (मैं कर रहा हूँ बिल्कुल यकीन नहीं है कि, मुझे लगता है कि यह DELETE FROM ... ORDER BY RAND() LIMIT ... के साथ एक निश्चित बीज के साथ था, इसलिए यह अभी भी तुलनीय है) और सक्षम और डायजेक्टेड इंडेक्स।

हमने विंडोज और लिनक्स पर कई अलग-अलग MySQL संस्करणों (5.0.27, 5.0.96, 5.1.something, 5.5.27, 5.6.2) के साथ इसका परीक्षण किया (हालांकि ओएस दोनों पर समान संस्करण नहीं)। माईसाम केवल तभी जीता जब टेबल खाली था। इनओडीबी तेज था जब डेटा पहले से मौजूद था और आम तौर पर बेहतर प्रदर्शन किया जाता था (एचडीडी-स्पेस को छोड़कर - माईसाम डिस्क पर छोटा है)।

फिर भी, इससे वास्तव में लाभ उठाने के लिए, आपको इसे स्वयं परीक्षण करना होगा - विभिन्न संस्करणों, विभिन्न कॉन्फ़िगरेशन सेटिंग्स और बहुत धैर्य के साथ - विशेष रूप से अजीब असंगतताओं के बारे में (5.0.97 5.5.27 से बहुत तेज था एक ही कॉन्फ़िगरेशन - हम अभी भी कारण खोज रहे हैं)। हमने जो पाया वह था DISABLE KEYS और ENABLE KEYS बेकार और कभी-कभी हानिकारक के बगल में हैं यदि आप खाली तालिका से शुरू नहीं करते हैं।

+1

यह वास्तव में शानदार जवाब है। आपके संपूर्ण शोध के लिए धन्यवाद! – pinkgothic

+0

हम्म, अच्छा प्रयास, लेकिन मुझे निष्कर्ष पर संदेह होगा क्योंकि महान बदलावों में परीक्षा परिणाम संकेत नहीं देंगे कि यहां ** अज्ञात कारकों का ** बहुत कुछ है? – Pacerier

संबंधित मुद्दे