2012-09-02 19 views
5

मेरे पास निम्न तालिका (file_category_tbl) फ़ाइलें और श्रेणियों के बीच कनेक्शन का प्रतिनिधित्व करने के लिए है।निम्नलिखित तरीके से सही तरीके से कैसे अनुक्रमणित करें?

SELECT * FROM file_category_tbl WHERE categoryId="3" ORDER BY order ASC 

:

fileId - bigint(20)   
categoryId - bigint(20) 
order - int(10) 

एक वर्ग में फ़ाइलों को आदेश दिया जा सकता है कि तो, मैं एक आदेश क्षेत्र है ... इसलिए मेरे सवाल का क्या अनुक्रमित मैं निम्नलिखित पर अनुकूलतम प्रदर्शन के लिए की आवश्यकता होगी है मेरे पास एक अद्वितीय सूचकांक है (fileId, categoryId); जैसा कि fileId समान categoryId के साथ नहीं हो सकता है। मुझे categoryId पर एक इंडेक्स भी मिला है, क्योंकि यह खोजा जा रहा है। मुझे order पर एक इंडेक्स भी मिला है? ... लेकिन क्या यह अनिवार्य है? के रूप में यह केवल मेरी समझ के अनुसार इस पर एक orderBy ...

तरह किसी भी प्रत्युत्तर को सादर ... जम्मू

+0

मुझे लगता है कि 'श्रेणी आईडी, ऑर्डर' पर एक बहु इंडेक्स उपरोक्त क्वेरी – Ankur

+0

के लिए पर्याप्त होना चाहिए, मैंने सोचा था कि MySQL ने 'ORDER BY' भाग में अनुक्रमणिका के बारे में परवाह नहीं की थी। संपादित करें: यदि mysql 'ORDER BY' पर इंडेक्स का उपयोग कर सकता है या नहीं कर सकता है: http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html – Krycke

उत्तर

1

कर रहा है, अपने अनुक्रमण समझदार है और आपकी क्वेरी के प्रदर्शन की दिशा में मदद मिलेगी। लेकिन मैं आपको सुझाव देता हूं कि संयुक्त Unique Index

कारण यह है कि मैं यह कह रहा हूं, यदि आप इस तालिका के अपने किसी भी रिकॉर्ड को संदर्भित करना चाहते हैं इसे हटाने या किसी अन्य फ़ंक्शन को करने के लिए, प्राथमिक कुंजी उपयोगी होगी। दूसरी ओर यह वास्तव में आपकी क्वेरी के प्रदर्शन को डाउनग्रेड कर सकता है क्योंकि आपको सभी फ़ील्ड की आवश्यकता होती है और अब प्राथमिक कुंजी फ़ील्ड के साथ, आपको 4 फ़ील्ड लेना होगा। इसके लिए एक समाधान के रूप में, आप निर्दिष्ट कर सकते हैं कि आप अपने परिणाम में कौन से कॉलम चाहते हैं।

आशा इस समझ में आता है :-)

2

ORDER BY Optimization के तहत दस्तावेज के रूप में:

कुछ मामलों में, MySQL उपयोग अनुक्रमित, ORDER BY हल करने नहीं सकता है, हालांकि यह अभी भी अनुक्रमित का उपयोग करता है खोजने के लिए WHERE खंड से मेल खाने वाली पंक्तियां।

SELECT * FROM t1 WHERE key2=constant ORDER BY key1;
:

[ deletia ]

  • पंक्तियों लाने के लिए इस्तेमाल किया कुंजी ORDER BY में इस्तेमाल एक के समान नहीं है: इन मामलों में निम्न शामिल

    इसलिए आपके वर्तमान अनुक्रमण का उपयोग सॉफ़्टवेयर ऑपरेटिंग के लिए नहीं किया जा सकता एन।हालांकि, एक ही पृष्ठ भी दस्तावेज:

    सूचकांक भी, अगर ORDER BY सूचकांक बिल्कुल मेल नहीं खाता भी इस्तेमाल किया जा सकता जब तक सूचकांक के अप्रयुक्त भाग और सभी अतिरिक्त ORDER BY के सभी के रूप में कॉलम WHERE खंड में स्थिरांक हैं। निम्नलिखित प्रश्नों ORDER BY हिस्सा हल करने के लिए सूचकांक का उपयोग करें:

    [ deletia ]

    SELECT * FROM t1 
        WHERE key_part1=constant 
        ORDER BY key_part2;

    इसलिए (categoryId,order) पर एक यौगिक सूचकांक दोनों फिल्टर और प्रकार के संचालन के लिए इस्तेमाल किया जा सकता, जो इस क्वेरी के लिए इष्टतम परिणाम है।

संबंधित मुद्दे