MySQL इंडेक्स का उपयोग क्यों नहीं करता?
MySQL इंडेक्स का उपयोग नहीं करेगा यदि बड़ा प्रतिशत पंक्तियों में से वह मान है।
क्यों जोड़ेंगे use index
यहां काम नहीं करने वाली क्वेरी के लिए
एक use index
खंड का कोई प्रभाव नहीं पड़ेगा, क्योंकि use index
केवल जो suggest का सुझाव देगा अनुक्रमणिका का उपयोग करने के लिए, यह सुझाव नहीं देगा कि किसी अनुक्रमणिका का उपयोग करना है या नहीं।
कुछ पंक्तियों वाली परीक्षण तालिकाओं का उपयोग करते समय चेतावनी
कुछ पंक्तियों के साथ परीक्षण तालिकाओं का उपयोग करते समय यह विशेष रूप से कष्टप्रद होता है क्योंकि MySQL एक अनुक्रमणिका का उपयोग करने से मना कर देगा, और यह देखना कठिन है कि आपकी क्वेरी में क्या गलत है।
इसलिए सुनिश्चित करें कि आप परीक्षण तालिका में पर्याप्त पंक्तियाँ जोड़ते हैं इसे एक यथार्थवादी परीक्षा बनाने के लिए।
क्या निम्न कार्डिनैलिटी कॉलम पर इंडेक्स का उपयोग करना बेकार है?
बूलियन स्तंभों पर अनुक्रमण उतना उपयोगी नहीं है जैसा कि आपने यह प्रश्न पूछने से पहले सोचा था।
हालाँकि यह बेकार भी नहीं है या तो।
InnoDB . के साथ यदि आपके बूलियन फ़ील्ड में एक अनुक्रमणिका है, तो MySQL अनुक्रमणिका का उपयोग करके डेटा को पुनः प्राप्त करने का प्रयास करेगा:
SELECT id, bool_field FROM table_with_many_columns_and_rows WHERE bool_field = 1
bool_field
. के लिए कवरिंग इंडेक्स में सभी डेटा पढ़ सकते हैं क्योंकि InnoDB में सेकेंडरी इंडेक्स में हमेशा प्राइमरी इंडेक्स शामिल होता है (id) साथ ही।
यह तेज़ है क्योंकि MySQL को पूरी तालिका को मेमोरी में पढ़ने की आवश्यकता नहीं है।
MyISAM में यह काम नहीं करता है और MySQL पूरी तालिका की जांच करेगा।
लेकिन मैं force index
का उपयोग कर सकता हूं
आप कर सकते हैं, लेकिन कम कार्डिनैलिटी इंडेक्स पर यह आपकी क्वेरी को धीमा कर देगा, तेज़ नहीं।केवल जटिल प्रश्नों पर और केवल केवल इंडेक्स को ओवरराइड करें यदि आप उन नियमों को जानते हैं जो MySQL अनुक्रमणिका का चयन करने के लिए उपयोग करता है।
लिंक:
देखें:http://dev.mysql .com/doc/refman/5.1/hi/mysql-indexes.html
और: http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/
यदि आप इस विषय पर एक पुस्तक चाहते हैं:पढ़ें
उच्च प्रदर्शन MySQL:http://oreilly.com /कैटलॉग/9780596003067