मुझे पहले भी इस समस्या का सामना करना पड़ा है। यहाँ इसका मेरा विश्लेषण है।
-
यह MySQL 5.7 और 8.0 में होता है, लेकिन जाहिर तौर पर पुराने संस्करणों में नहीं और मारियाडीबी में नहीं।
-
मैं जिस "समाधान" को पसंद करता हूं, वह है इंडेक्स को इस प्रकार बदलना:
INDEX(company_id) -- DROP this INDEX(company_id, id) -- ADD this
हालांकि 2-स्तंभ अनुक्रमणिका सैद्धांतिक रूप से InnoDB के लिए एक-स्तंभ अनुक्रमणिका के समान है (id
मानते हुए) PK है), ऐसा लगता है कि ऑप्टिमाइज़र इस तथ्य को अनदेखा कर देता है कुछ स्थितियों में ।
साथ ही, मैं स्पष्ट रूप से पीके जोड़ना पसंद करता हूं जब मुझे कोई आवश्यकता दिखाई देती है . यह स्कीमा के भावी पाठकों (स्वयं सहित) को संकेत देता है कि पीके को जोड़ने से कुछ क्वेरी को लाभ होता है।
मुझे अभी तक ऐसा कोई मामला नहीं मिला है, जहां "इंडेक्स मर्ज इंटरसेक्ट" एक समान कंपोजिट इंडेक्स की तुलना में तेज हो।
मुझे डर है कि भविष्य में डेटा वितरण बदल जाएगा और मेरा "संकेत" चीजों को और खराब कर देगा, इस डर के लिए सूचकांक "संकेत" का उपयोग करना पसंद नहीं है।