2010-09-04 23 views
5

में में मदद नहीं करता है अगर मैं इस प्रश्न के बारे में,MySQL सूचकांक

EXPLAIN SELECT * FROM `smth` WHERE d_id = 9 

यह तुरंत एक पंक्ति जाँच करता है। लेकिन जब मैं IN उपयोग करते हैं, उदाहरण के

EXPLAIN SELECT * FROM `smth` WHERE d_id IN (9, 3) 

के लिए यह सभी पंक्तियों जाँच करता है। अगर सूचकांक वहां मदद नहीं करता है तो मैं IN के बजाय क्या करना चाहिए?

+0

हाँ मैं जवाब जानने के लिए बहुत उत्सुक हूं –

+0

आपको लगता है कि यह सभी पंक्तियों की जांच क्यों करता है? क्या आप एक्स्पलाइन चयनों का आउटपुट पोस्ट कर सकते हैं? –

+0

ब्याज का हो सकता है: http://stackoverflow.com/questions/586381/mysql-not-using-indexes-with-where-in-clause – Fionnuala

उत्तर

7

MySQL 5.1 में range है जो IN भविष्यवाणियों को अनुकूलित करने वाले प्रकार में शामिल है। देखें http://dev.mysql.com/doc/refman/5.1/en/explain-output.html

हालांकि, MySQL ऑप्टिमाइज़र ने यह निर्धारित किया होगा कि आपके d_id कॉलम में बहुत अधिक पंक्तियों में मूल्य 9 और 3 शामिल हैं, यह तय किया गया है कि यह सूचकांक पढ़ने के बजाय पूरी तालिका को पढ़ने के लिए सस्ता होगा और फिर तालिका।

समानता के अनुसार, यदि आप एक पुस्तक पढ़ते हैं और आप "पेज" शब्द को "पृष्ठ" के रूप में खोजना चाहते हैं, तो आप "द" के रूप में इंडेक्स पर जाएंगे, प्रत्येक पृष्ठ पर फ़्लिप करें के बदले में? या आप बस कवर करने के लिए पुस्तक कवर पढ़ेंगे क्योंकि लगभग हर पृष्ठ पर उस शब्द को रखने की गारंटी है?

+2

यह वास्तव में शानदार स्पष्टीकरण था। मैंने अभी बहुत सारी पंक्तियां डाली हैं और फिर से उपयोग करने की कोशिश की है और अब यह केवल कुछ पंक्तियों की जांच नहीं की गई है। धन्यवाद। –

1

ऐसा शायद इसलिए है क्योंकि आपकी तालिका में कई पंक्तियां नहीं हैं। यदि आपकी तालिका में अधिक पंक्तियां हैं तो शायद यह सूचकांक का उपयोग करेगी। यहां एक लाख पंक्तियों वाली तालिका से एक उदाहरण दिया गया है:

 
EXPLAIN SELECT * FROM table1 WHERE x = 9; 
1, 'SIMPLE', 'table1', 'const', 'PRIMARY', 'PRIMARY', '4', 'const', 1, '' 

EXPLAIN SELECT * FROM table1 WHERE x IN (9, 3); 
1, 'SIMPLE', 'table1', 'range', 'PRIMARY', 'PRIMARY', '4', '', 2, 'Using where' 

दोनों मामलों में प्राथमिक कुंजी अनुक्रमणिका का उपयोग किया जाता है।

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