2011-01-04 12 views
5

सामान्य रूप से, FROM खंड में तालिकाओं की व्यवस्था या आदेश क्वेरी के प्रदर्शन में सुधार करने में कोई फर्क पड़ता है? व्यवस्था से मेरा मतलब सबसे छोटी मेज और सबसे बड़ी मेज है।क्या खंड से तालिकाओं की व्यवस्था/व्यवस्था प्रदर्शन में सुधार करने में कोई फर्क पड़ता है?

किसी भी अलग अनुभव/विचार/राय/कारकों की भी सराहना की जाती है।

मेरे मामले में, हम PostgreSQL v8.2.3 का उपयोग कर रहे हैं।

+2

ऑफटॉपिक: संस्करण 8.2.3 लगभग 4 वर्ष पुराना है और 16 रिलीज पीछे है। आपको कुछ रखरखाव करना है। 8.2.1 9 को अपडेट करना एक बड़ा सौदा नहीं है, बस इसे करें। –

उत्तर

4

लिए भीतरी मिलती है, यह किसी भी अनुकूलक फर्क योजनाओं के रूप में कई अलग अलग आदेश में मिलती है के रूप में संभव है कर उत्पन्न होगा नहीं करना चाहिए (से खंड में टेबल geqo_threshold तक)।

बाहरी जॉइन सममित नहीं हैं, इसलिए कथन में ऑर्डरिंग महत्वपूर्ण है (हालांकि वास्तविक निष्पादन आदेश अभी भी सर्वर द्वारा तय किया गया है)।

+0

मैं सहमत हूं। PostgreSQL प्लानर आंकड़ों के आधार पर टेबल के सही "ऑर्डर" को चुनने के लिए पर्याप्त स्मार्ट है। बाहरी जुड़ने के लिए यह निश्चित रूप से एक फर्क पड़ता है (लेकिन फिर यह परिणाम में भी अंतर डालता है) –

+1

प्रश्न योजना में 'geqo (जेनेटिक क्वेरी ऑप्टिमाइज़र) 'के अस्तित्व के बारे में मुझे बताने के लिए धन्यवाद। – Gnanam

2

क्या आप "टेबल 1, तालिका 2 से चुनें" जैसे कुछ उपयोग कर रहे हैं? टेबल "अंतर्निहित" क्रॉस-इन हैं, इसलिए मुझे नहीं लगता कि यह महत्वपूर्ण है।

पहली बात यह है कि मैं एक्स्पलाइन का उपयोग करके दो संभावित प्रश्नों का परीक्षण कर सकता हूं, और देख सकता हूं कि कोई अंतर है या नहीं?

0

(जेनेरिक एसक्यूएल सलाह, बल्कि Postgre से विशिष्ट)

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

यह हो सकता है कि एक विशेष क्वेरी किसी विशेष अनुकूलक (एक निश्चित डीबी, सर्वर स्थिति, उत्पाद के संस्करण आदि के लिए) का कारण बनती है, लेकिन ऐसी स्थिति का सामना करना दुर्लभ होना चाहिए।

0

यदि आप FROM foo, bar, baz लिखते हैं तो नहीं, इससे कोई फर्क नहीं पड़ता। यदि आप FROM foo JOIN bar ... JOIN baz ... (आंतरिक जुड़ता है) लिखते हैं, तो यदि आपके पास join_collapse_limit तत्वों से कम है तो इससे कोई फर्क नहीं पड़ता है; अन्यथा जॉइन ऑर्डर तय किया गया है, जिसे आप मैन्युअल रूप से ऐसी चीजों को अनुकूलित करने के लिए उपयोग कर सकते हैं (लेकिन इसकी शायद ही आवश्यकता है)। बाहरी जुड़ने के लिए, शामिल होने के क्रम में शामिल होने के क्रम में तय किया जाता है, क्योंकि इससे परिणाम प्रभावित होते हैं।

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