किसी इंडेक्स (सिंगल-कॉलम या मल्टी-कॉलम) को बनाए रखने की लागत लगभग हमेशा प्रदर्शन में सुधार से अधिक होती है जब उस इंडेक्स का उपयोग किया जाता है। यह प्रत्येक INSERT
. पर एक छोटी सी वृद्धि है /DELETE
, साथ ही UPDATE
. के माध्यम से अनुक्रमित फ़ील्ड के मान को बदलने पर लागत . (UPDATE
मामला दुर्लभ है।) तो, "एक यौगिक सूचकांक बनाए रखने" की लागत के बारे में चिंता न करें।
WHERE `vehicles`.`type` IN ('Car')
AND `vehicles`.`user_id` = 10
जरूरत है INDEX(user_id, type)
।
अनुकूलक होगा
- पता लगाएं कि वह इंडेक्स एक संभावित उम्मीदवार है,
- कुछ आंकड़े जांचें, फिर
- या तो अनुक्रमणिका का उपयोग करें, या तय करें कि कार्डिनैलिटी खराब है और बस तालिका को स्कैन करें।
सूचकांक शामिल करें; इसके बारे में चिंता मत करो।
मैंने फ़ील्ड को इस तरह से ऑर्डर किया, न कि (type, user_id)
आपके IN
. के आधार पर , जिसका अर्थ है कि आपके पास कभी-कभी type
. के लिए एकाधिक मान हो सकते हैं ।
यदि तालिका की सभी पंक्तियों में type = 'Car'
है , कोई समस्या नहीं। मैंने जो कुछ भी कहा है वह अभी भी लागू होता है। अनावश्यक type
. को शामिल करने की बर्बादी महत्वहीन है।
सभी "=" कॉलम को पहले इंडेक्स में रखना बेहतर है, फिर अधिक से अधिक एक अन्य फ़ील्ड में। आगे की चर्चा यहां ।