मैं इस परिदृश्य पर है: एक MySQL डेटाबेस में, मैं 2 MyISAM तालिकाओं, 42 लाख पंक्तियों के साथ एक है, और 320 मिलियन पंक्तियों के साथ एक और है। निम्नलिखित तालिकाओं के लिए स्कीमा है:MySQL में शामिल होने के बावजूद शो अच्छी योजना व्याख्या के साथ धीमी गति से क्वेरी
Table1 (4.2M पंक्तियों)
F1 INTEGER UNSIGNED NOT NULL PRIMARY KEY
f2 varchar(40)
f3 varchar(40)
f4 varchar(40)
f5 varchar(40)
f6 smallint(6)
f7 smallint(6)
f8 varchar(40)
f9 varchar(40)
f10 smallint(6)
f11 varchar(10)
f12 tinyint(4)
f13 smallint(6)
f14 text
तालिका 2 (320M पंक्तियों)
F1 INTEGER UNSIGNED NOT NULL PRIMARY KEY
f2 INTEGER UNSIGNED NOT NULL
तालिका 2 एक अलग डेटाबेस में है, लेकिन मैं एक संग्रहीत उपयोग कर रहा हूँ प्रक्रिया जो दो तालिकाओं से पूछताछ करता है। दो तालिकाओं के बीच संबंध यह है कि Table1.F1 के लिए लगभग हो सकता है। Table2.F1 (विदेशी कुंजी) कौन-से मिलान में 100 पंक्तियाँ, और Table2.f2 के लिए मूल्य इन मिलान किया चाबी के लिए लौटा दी जाएगी। मैं (, f3 (10) f2 (15)) के बाद Table1 पर और एक सूचकांक IX2 (F1, F2) और IX3 (F2) तालिका में 2
प्रश्नों मैं चला रहा हूँ कर रहे हैं एक सूचकांक IX1 है:
SELECT g.F1
FROM DB1.Table1 g
INNER JOIN DB2.Table2 gp ON g.F1 = gp.F1
WHERE (gp.f2 = 452677825) AND
(g.f2 = 'A string value') LIMIT 0,56
इस क्वेरी कभी कभी बहुत तेजी से (< 1s), लेकिन स्ट्रिंग मान कि g.F2 प्रश्नों जो 11 और कभी कभी भी अधिक भी 30 सेकंड लेने के लिए होता है की तुलना में है बदल रहा है। मैं समझ नहीं पा रहा हूं कि ऐसा क्यों है। निष्पादित किए गए चयन पर EXPLAIN का आउटपुट निम्न है।
1, 'SIMPLE', 'g', 'ref', 'PRIMARY,IX1', 'IX1', '17', 'const', 901, 'Using where'
1, 'SIMPLE', 'gp', 'ref', 'IX3,IX2', 'IX2', '8', 'DB1.g.F1,const', 1, 'Using index'
जो काफी अच्छी निष्पादन योजना प्रतीत होता है। समझाने की शीर्ष पंक्ति में पंक्तियों की संख्या अधिकतम 2000 को जाता है, लेकिन मैं नहीं दिख रहा है यही कारण है कि इस प्रणाली परिणामों को एक दूसरे के एक अंश से अब किसी भी लेना चाहिए। मैं भी प्रश्न पर प्रोफाइलर भाग गया और पाया है कि प्रश्नों "भेजा जा रहा है डेटा" मंच पर समय की 99.9% खर्च कर रहे हैं। क्या कोई यह बता सकता है कि ऐसा क्यों है, और क्वेरी को अनुकूलित करने के लिए क्या किया जा सकता है?
अग्रिम धन्यवाद, टिम
धीमे प्रदर्शन करने वाले प्रश्नों को भी अधिक डेटा लौटाते हैं? –
हाय विल। आपके कमेंट के लिए धन्यवाद। प्रश्न सभी 56 पंक्तियों पर वापस आ जाएंगे क्योंकि मैं कथन सीमित कर रहा हूं। हालांकि, एक सामान्य नियम के रूप में, एक्स्पलाइन की शीर्ष पंक्ति में जितनी अधिक पंक्तियां होती हैं, उतना ही समय लगता है, लेकिन यह हमेशा ऐसा नहीं होता है। – Tim
क्या तालिका 1 पर IX1 में f2 से शामिल वर्णों की संख्या में वृद्धि का प्रदर्शन प्रदर्शन पर कोई प्रभाव पड़ता है? विशेष रूप से, यह 40 को चीजों में सुधार करने के लिए बढ़ रहा है? –