2008-12-15 12 views
5

मेरे पास श्रेणियों नाम की एक तालिका है, जिसमें आईडी (लंबा), नाम (वर्कर (50)), parentID (लंबा), और दिखाया गया है ByDefault (बूलियन) कॉलम।PostgreSQL बदले गए पंक्तियों का क्रम बदल रहा है

इस तालिका में 554 रिकॉर्ड हैं। सभी दिखाए गए ByDefaultValues ​​'झूठी' हैं।
जब मैं 'आईडी का चयन करें, श्रेणियों से नाम' निष्पादित करता हूं, तो पीजी मुझे अपनी सभी श्रेणियों, ऑपरेटर को अपनी आईडी द्वारा लौटाता है।
फिर मैं तालिका की कुछ पंक्तियों को अपडेट करता हूं ('अपडेट श्रेणियां सेट करें जो किडिडीफॉल्ट जहां parentId = 1') अपडेट करें, ठीक है अपडेट करें।
फिर, जब मैं पहली क्वेरी निष्पादित करने का प्रयास करता हूं, जो सभी श्रेणियों को लौटाता है, तो वे बहुत ही अजीब क्रम के साथ रिटर्नर हैं।
मुझे 'ऑर्डर बाय' जोड़ने में कोई समस्या नहीं है, लेकिन चूंकि मैं यह मान प्राप्त करने के लिए जेपीए का उपयोग कर रहा हूं, कोई भी जानता है कि समस्या क्या है या अगर इसे ठीक करने का कोई तरीका है?

उत्तर

16

यह कोई समस्या नहीं है। SQL SELECT द्वारा लौटाई गई पंक्तियों का क्रम तब तक अनिर्धारित नहीं है जब तक कि इसमें ORDER BY न हो। ऑर्डर जो आप उन्हें प्राप्त करते हैं, वे आमतौर पर तालिका में संग्रहीत क्रम और/या बयान द्वारा उपयोग किए जाने वाले सूचकांक से प्रभावित होते हैं।

तो ORDER BY का उपयोग किए बिना उस आदेश के आधार पर एक बहुत ही बुरा विचार है।

यदि आपको कुछ क्रम में उनकी आवश्यकता है, तो बस इसे निर्दिष्ट करें।

यह महत्वपूर्ण है कि एक पंक्ति पंक्तियों की set है और sequence पंक्तियों की नहीं है।

9

docs से:

ORDER BY खंड निर्दिष्ट है, तो वापस आ पंक्तियों निर्दिष्ट क्रम में हल कर रहे हैं। यदि ऑर्डर बीई नहीं दिया जाता है, तो पंक्तियों को वापस लौटाया जाता है जो सिस्टम को उत्पादन के लिए सबसे तेज़ लगता है।

2

डिस्क पर उनके भौतिक क्रम में पंक्तियों को वापस कर दिया जाता है; आप उन्हें CLUSTER एसक्यूएल कमांड का उपयोग करके भौतिक रूप से पुन: व्यवस्थित कर सकते हैं, लेकिन पोस्टग्रेस काम करने के तरीके के कारण वे पंक्तियों को संशोधित करने के तुरंत बाद अनियंत्रित हो जाएंगे।

आप जो कर रहे हैं उसके लिए ORDER BY सही उत्तर है।

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