क्या एक ही price
. के साथ इतनी सारी पंक्तियां होना यथार्थवादी है? ? क्या किसी क्वेरी से 444K पंक्तियों को वापस करना यथार्थवादी है? मैं ये इसलिए पूछता हूं क्योंकि क्वेरी ऑप्टिमाइज़ेशन "सामान्य" डेटा पर आधारित होता है।
एक इंडेक्स (जैसे, INDEX(price)
) price
. की तलाश में उपयोगी है जो बहुत कम बार होता है। वास्तव में, ऑप्टिमाइज़र इंडेक्स को छोड़ देता है यदि वह देखता है कि खोजा जा रहा मान लगभग 20% से अधिक बार होता है। इसके बजाय, यह केवल अनुक्रमणिका को अनदेखा करेगा और वही करेगा जो आपने पहले परीक्षण किया था--बस पूरी तालिका को स्कैन करें, किसी भी पंक्ति को अनदेखा करें जो मेल नहीं खाती।
आपको ऐसा करने में सक्षम होना चाहिए
EXPLAIN select * from books where price = 10
सूचकांक के साथ और बिना। वैकल्पिक रूप से, आप कोशिश कर सकते हैं:
EXPLAIN select * from books IGNORE INDEX(books_price_index) where price = 10
EXPLAIN select * from books FORCE INDEX(books_price_index) where price = 10
लेकिन, ... ऐसा लगता है कि ऑप्टिमाइज़र ने अनुक्रमणिका को नज़रअंदाज़ नहीं किया। मैं देख रहा हूं कि price
. की "कार्डिनैलिटी" "1" है, जिसका अर्थ है कि उस कॉलम में केवल एक विशिष्ट मान है। यह 'आँकड़ा' या तो गलत है या भ्रामक। कृपया इसे चलाएँ और देखें कि क्या परिवर्तन होते हैं:
ANALYZE TABLE books;
यह कुछ यादृच्छिक जांच के माध्यम से आँकड़ों की पुनर्गणना करेगा, और हो सकता है उस "1" को शायद "2" में बदलें।
सामान्य सलाह:गढ़े हुए डेटा के विरुद्ध चलने वाले बेंचमार्क से सावधान रहें।