मेरे पास आईएनटी के कॉलम के साथ 200k प्रविष्टियों की एक तालिका है। मैं प्रश्नों को तेजी से बनाने के लिए एक सूचकांक बनाना चाहता हूं। यह वह क्वेरी है जिसे मैं निष्पादित करना चाहता हूं: SELECT A,B,C,D,E FROM table WHERE A=23 and (B=45 or C=43)
। मैंने निम्नलिखित अनुक्रमणिका बनाई: B
, ACD
, C
, ABC
।MySQL। "OR" प्रश्नों के लिए एक इंडेक्स बनाना
EXPLAIN
कमांड के साथ मैंने पाया कि MySQL सूचकांक ACD
चुनता है। तो मैंने टेबल को अधिक मूल्यों के साथ पॉपुलटिंग रखा और मुझे एहसास हुआ कि MySQL उपरोक्त इंडेक्स के बीच स्विच कर रहा था (हमेशा एक ही नहीं)।
चूंकि कई प्रविष्टियां हैं, इसलिए विभिन्न इंडेक्स होने से प्रदर्शन के मुद्दों का कारण बन जाएगा और हम यह मान सकते हैं कि इस तालिका को अन्य प्रश्नों से एक्सेस किया जाता है, जिनके लिए प्रत्येक कॉलम समझ में आता है।
मुझे USE INDEX()
से अवगत है, लेकिन मैं समझना चाहता हूं कि हमें सही सूचकांक चुनने के लिए MySQL पर भरोसा करना चाहिए या नहीं।
आपका क्या मतलब है "हम मान सकते हैं कि इस तालिका को अन्य प्रश्नों से एक्सेस किया गया है जिसके लिए विभिन्न कॉलम की आवश्यकता होती है जहां हर इंडेक्स समझ में आता है"? क्या आप ऐसे प्रश्नों के कुछ उदाहरण दे सकते हैं? क्या आप हमें 'टेबल से क्वेरी' इंडेक्स का आउटपुट भी दे सकते हैं? ए, एबी और एसी पर इंडेक्स निश्चित रूप से अनावश्यक हैं: ये पहले ही एसीडी/एबीसी, एबीसी और एसीडी पर इंडेक्स द्वारा कवर किए गए हैं। आप इस बारे में पढ़ सकते हैं कि MySQL मल्टी-कॉलम इंडेक्स को http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html – Daan
पर पूछताछ कैसे करें: 'तालिका से बी प्राप्त करें जहां बी = 12'। ठीक है, मैं ए, एबी, एसी (धन्यवाद) को खत्म कर सकता हूं। लेकिन यह अभी भी 'एसीडी 'का उपयोग करने के कारण की व्याख्या नहीं करता है। जब 'WH' 'WHERE' कथन में भी नहीं होता है। –
हां, यह थोड़ा रहस्यमय है: 'तालिका से क्वेरी दिखाएं' क्वेरी का आउटपुट यह देखने में मदद कर सकता है कि यह क्यों हो रहा है :) – Daan