2009-04-07 20 views
17

मान लें कि एक MySQL तालिका (ISAM) के डिफ़ॉल्ट आदेश बदल गया है को क्रियान्वित करते हुए:MySQL में डिफ़ॉल्ट तरह आदेश (टेबल बदल ... द्वारा ... आदेश;)

ALTER TABLE tablename ORDER BY columnname ASC; 

अब से , क्या मैं गारंटी देता हूं "कॉलमनाम एएससी" के क्रम में तालिका से पुनर्प्राप्त रिकॉर्ड्स प्राप्त करने के लिए मेरे प्रश्नों में निर्दिष्ट "ऑर्डर बाय" निर्दिष्ट है (यानी "चयन करें * टैबलेट नाम से ... LIMIT 10;")?

क्या कोई कोने-मामले हैं जिनके बारे में मुझे अवगत होना चाहिए?

# अद्यतन 1: धन्यवाद जो सही ढंग से कहा कि आवेषण और नष्टकरण आदेश को खराब करता एक बहुत Quassnoi करने के लिए। इससे मुझे अतिरिक्त प्रश्नों के लिए निम्नलिखित कारण मिलते हैं:

  • अद्यतनों के बारे में क्या? मान लें कि तालिका में कोई INSERT या DELETEs नहीं किए जाते हैं, लेकिन केवल अपडेट - सॉर्ट ऑर्डर बरकरार रहेगा?
  • मान लें कि INSERT और DELETEs बनाए गए हैं - मैं एक बार फिर से सॉर्टिंग कैसे "पुनर्निर्माण" कर सकता हूं, इस दिन में (तालिका इस तालिका में केवल दैनिक बदलती है, इसलिए बदलावों के बाद इसे रोजाना पुनर्निर्माण करना ठीक है!)। क्या मरम्मत तालिका इसे ठीक करती है, या फिर भी तालिका को जोड़ना चाहिए ... फिर से आदेश?

उत्तर

24
documentation से

:

ध्यान दें कि तालिका आवेषण के बाद इस क्रम में नहीं रहता और वास्तव में

को हटा देता है, यदि आप ALTER TABLE जीता करने के लिए इस तालिका को SELECT ... ORDER BY जारी, विकल्प आपको filesort की छूट नहीं है, बल्कि इसके बजाय filesort बहुत तेज़ बनाते हैं।

पहले से ही आदेशित सेट को सॉर्ट करना इस सेट को ब्राउज़ करने के बराबर है, यह सुनिश्चित करने के लिए कि सबकुछ ठीक है।

अद्यतनों के बारे में क्या? मान लें कि तालिका में कोई INSERT या DELETEs नहीं किए जाते हैं, लेकिन केवल अपडेट - सॉर्ट ऑर्डर बरकरार रहेगा?

अपनी मेज किसी भी गतिशील फ़ील्ड शामिल नहीं हैं (जैसे VARCHAR या 'ब्लॉब'), तो सबसे शायदMyISAM यह जब अद्यतन करने के लिए कदम नहीं होगा।

मैं इस व्यवहार पर भरोसा नहीं करता, हालांकि, अगर मैं एक परमाणु ऊर्जा संयंत्र बना रहा था या कुछ मुझे भुगतान मिलता है।

मान लें कि आवेषण और नष्टकरण बना रहे हैं - मैं कैसे "पुनर्निर्माण" है फिर छँटाई, एक दिन में एक बार कहते हैं कि (इस विशेष मामले तालिका केवल दैनिक बदल जाता है, तो दैनिक यह पुनर्निर्माण के बाद परिवर्तन किया जाता है चाहिए अभी भी ठीक हो!)। क्या मरम्मत तालिका इसे ठीक करती है, या फिर भी तालिका को जोड़ना चाहिए ... फिर से आदेश?

आपको ALTER TABLE ... ORDER BY करना होगा।

REPAIR बस दूषित तालिका की भौतिक संरचना को ठीक करता है।

+0

आपके त्वरित उत्तर के लिए बहुत बहुत धन्यवाद। मैंने दो अनुवर्ती प्रश्न जोड़े हैं जो आपके उत्तरों से संबंधित हैं। – knorv

+0

@Quassnoi मैंने वैकल्पिक तालिका में ... आदेश दिया और फिर कुछ रिकॉर्ड हटा दिए, मेरी तालिका बड़े पैमाने पर नहीं हुई ..? ऐसा क्यों है? – Basit

+0

@ बेसिट: मुझे नहीं पता – Quassnoi

-1

डिफ़ॉल्ट सॉर्ट ऑर्डरिंग आलसी होने के प्रयास की तरह लगती है जो आपको सड़क के नीचे सिरदर्द देकर समाप्त कर देगी। मैं इसे बिल्कुल नहीं छूंगा और केवल अपने प्रश्नों में आदेश निर्दिष्ट करना सुनिश्चित कर दूंगा।

+12

क्या मेरा प्रश्न किसी भी तरह से कम नहीं किया गया था? मैं यह देखने में असफल रहा कि आपकी पोस्ट पूछे जाने वाले विशिष्ट प्रश्न का उत्तर कैसे हो सकती है। – knorv

+2

कठोर मत बनो, वह सिर्फ मदद करना चाहता था !, सामान्य रूप से बात करते हुए, क्या उसका सुझाव मान्य नहीं है? – dennisbot

3

भौतिक रूप से कॉलम ऑर्डर करने से आईओ के भार बचा सकते हैं। यह क्वेरी सिस्टम को गति देने के लिए उन्नत सिस्टम में उपयोग की जाने वाली पूरी तरह से वैध विधि है। आपको बस डेटा को फिर से दर्ज करने की आवश्यकता है और फिर यह क्लस्टर रहता है। सिर्फ इसलिए कि कुछ लोगों ने इसके बारे में नहीं सुना है इसका मतलब यह नहीं है कि यह अस्तित्व में नहीं है। - 25 साल उन्नत डीबी डिजाइन अनुभवी।

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