का उपयोग नहीं कर रहा है मेरी mySQL तालिका को सॉर्ट करना इंडेक्स का उपयोग नहीं करता है और मुझे नहीं पता कि क्यों।बहुत सरल mysql क्वेरी इंडेक्स
मुझे मिल गया है:
CREATE TABLE IF NOT EXISTS `test` (
`a` int(11) NOT NULL,
`b` int(11) NOT NULL,
KEY `kk` (`a`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
और इस:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE test ALL NULL NULL NULL NULL 10009 Using filesort
:
EXPLAIN SELECT *
FROM test
ORDER BY a
रूप में अच्छी तरह इस
EXPLAIN SELECT *
FROM test
USE INDEX (kk)
ORDER BY a
रूप
मुझे इस देता है
मैं इस फाइल को नहीं देखना चाहता, और मेरी तालिका को सॉर्ट करने के लिए कुंजी केके का उपयोग करना चाहता हूं। मैं क्या गलत कर रहा हूं?
आपके पोस्ट लोगों के लिए धन्यवाद, वे मेरे प्रश्न का उत्तर देते हैं! हालांकि, अब मैं "टेबल स्कैन" और "फाइलोर्ट" द्वारा क्या मतलब है undestand नहीं है? यहां तक कि यदि मैं सभी फ़ील्ड और तालिका की सभी पंक्तियों का चयन कर रहा हूं, तो उस कॉलम के सूचकांक के आंतरिक पेड़ (और) तालिका में देखकर एक तालिका द्वारा उस तालिका को सॉर्ट करना तेज़ नहीं है (और फिर तालिका में देखकर) प्रत्येक पंक्ति के लिए O (1) में अनुरोध किए गए अतिरिक्त कॉलम को दर्ज करें => इंडेक्स फ़ाइल तालिका फ़ाइल में प्रत्येक पंक्ति की भौतिक स्थिति को स्टोर करती है, या?), उदाहरण के अनुसार इंडेक्स को छूए बिना, तालिका फ़ाइल में (संभावित रूप से) यादृच्छिक रूप से संग्रहीत पंक्तियों में त्वरित रूप से ओ (एन * लॉग एन) में? मुझे लगता है कि मेरी एसक्यूएल में इंडेक्स कैसे काम करता है मेरी समझ गलत है। यह पूर्ण स्कैन का उपयोग करने के अधिक कुशल होने का अनुमान mysql -
आप "सभी पंक्तियों" 1 में), सही मतलब है? –
@a_horse_with_no_name: शायद मैं "पूरी तालिका" (या "सभी पंक्तियां" वास्तव में) का मतलब था। यह सुनिश्चित नहीं है कि यह अंग्रेजी में सही तरीके से कैसे व्यक्त किया जाए। – zerkms
हां, "पूरी तालिका" या "सभी पंक्तियां" मुझे बेहतर लगेगी। –