कभी-कभी हम व्युत्पन्न तालिका और अस्थायी तालिका दोनों के साथ एक क्वेरी लिख सकते हैं। मेरा सवाल यह है कि कौन सा बेहतर है? क्यूं कर?किसके पास बेहतर प्रदर्शन है: व्युत्पन्न टेबल्स या अस्थायी सारणी
उत्तर
व्युत्पन्न तालिका एक तार्किक निर्माण है।
इसे tempdb
में संग्रहीत किया जा सकता है, जिसे प्रत्येक बार एक्सेस किए जाने वाले अंतर्निहित कथन का पुनर्मूल्यांकन करके, या यहां तक कि अनुकूलित भी किया जाता है।
अस्थायी तालिका एक भौतिक निर्माण है। यह tempdb
में एक तालिका है जो मूल्यों के साथ बनाई और बनाई गई है।
कौन सा बेहतर है, उस तालिका पर निर्भर करता है, जिसका उपयोग तालिका में प्राप्त करने के लिए किया जाता है, और कई अन्य कारकों पर निर्भर करता है।
उदाहरण के लिए, CTE
(सामान्य तालिका अभिव्यक्ति) SQL Server
में (और शायद संभवतः) का उपयोग हर बार पुन: मूल्यांकन किया जा सकता है। इस क्वेरी:
WITH q (uuid) AS
(
SELECT NEWID()
)
SELECT *
FROM q
UNION ALL
SELECT *
FROM q
होगा सबसे शायद उपज दो अलग NEWID()
की।
इस मामले में, एक अस्थायी तालिका का उपयोग किया जाना चाहिए क्योंकि यह गारंटी देता है कि इसके मूल्य जारी हैं।
दूसरी ओर, इस क्वेरी:
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS rn
FROM master
) q
WHERE rn BETWEEN 80 AND 100
एक व्युत्पन्न की मेज के साथ बेहतर है, एक अस्थायी तालिका का उपयोग कर master
से सभी मूल्यों को लाते समय की आवश्यकता होगी, जबकि इस समाधान केवल का उपयोग कर पहली 100
रिकॉर्ड को स्कैन करेगा क्योंकि सूचकांक id
पर।
व्युत्पन्न टेबल्स का उपयोग करने के लिए बेहतर है? सरल प्रश्नों में? –
धन्यवाद Quassnoi, आपका नमूना बहुत अच्छा है। –
आपने यहां 'सबसे अधिक संभवतः' क्यों उपयोग किया - "शायद दो अलग-अलग न्यूआईडी() हैं।" ? – thewpfguy
यह परिस्थितियों पर निर्भर करता है।
व्युत्पन्न तालिकाओं के लाभ:
एक व्युत्पन्न मेज पर एक बड़ा, क्वेरी का हिस्सा है, और शेष क्वेरी के संदर्भ में अनुकूलित किया जाएगा। यह एक लाभ हो सकता है, यदि क्वेरी अनुकूलन प्रदर्शन में मदद करता है (यह आमतौर पर कुछ अपवादों के साथ करता है)। उदाहरण: यदि आप एक अस्थायी तालिका को पॉप्युलेट करते हैं, तो परिणाम को दूसरी क्वेरी में उपभोग करें, आप प्रभावी रूप से डेटाबेस इंजन को एक निष्पादन विधि में डाल रहे हैं (पूरी क्वेरी में पहली क्वेरी चलाएं, संपूर्ण परिणाम सहेजें, दूसरी क्वेरी चलाएं) जहां व्युत्पन्न तालिका के साथ ऑप्टिमाइज़र एक तेज निष्पादन विधि या पथ तक पहुंचने में सक्षम हो सकता है।
क्वेरी व्युत्पन्न योजना के संदर्भ में एक व्युत्पन्न तालिका केवल "मौजूद" है - यह पूरी तरह से एक तार्किक निर्माण है। वास्तव में कोई टेबल नहीं है।
अस्थायी तालिकाओं
तालिका "मौजूद है" के लाभ - जो है, यह एक तालिका के रूप में कम से कम स्मृति में materialized है, जो परिणाम सेट होता है और पुन: उपयोग किया जा सकता है।
कुछ मामलों में, प्रदर्शन को बेहतर किया जा सकता है या डेटा पर कुछ विस्तृत परिवर्तन करने के दौरान आपको अवरुद्ध किया जा सकता है - उदाहरण के लिए, यदि आप आधार तालिका से पंक्तियों का एक 'स्नैपशॉट' सेट लेना चाहते हैं व्यस्त, और उसके बाद उस सेट पर कुछ जटिल गणना करें, यदि आप बेस टेबल से पंक्तियां प्राप्त करते हैं और इसे जितनी जल्दी हो सके अनलॉक करते हैं, तो स्वतंत्र रूप से काम करें, तो कम विवाद हो सकता है। कुछ मामलों में एक वास्तविक अस्थायी तालिका का उपरांत संक्षेप में लाभ के सापेक्ष छोटा है।
बड़ा अंतर यह है कि आप अस्थायी तालिका पर प्राथमिक कुंजी सहित बाधा डाल सकते हैं। बड़े के लिए (मेरा मतलब लाखों रिकॉर्ड हैं) कभी-कभी आप अस्थायी के साथ बेहतर प्रदर्शन प्राप्त कर सकते हैं। मेरे पास मुख्य प्रश्न है जिसमें 5 जोड़ों की आवश्यकता है (प्रत्येक जुड़ने समान होता है)। प्रदर्शन 2 जोड़ों के साथ ठीक था और फिर तीसरे प्रदर्शन पर खराब हो गया और क्वेरी योजना पागल हो गई। संकेतों के साथ भी मैं क्वेरी प्लान को सही नहीं कर सका। व्युत्पन्न तालिकाओं और अभी भी एक ही प्रदर्शन के मुद्दों के रूप में जुड़ने के पुनर्गठन की कोशिश की। अस्थायी तालिकाओं के साथ प्राथमिक कुंजी बना सकते हैं (तब जब मैं पीके पर पहली तरह से पॉप्युलेट करता हूं)। जब एसक्यूएल 5 टेबल में शामिल हो सकता है और पीके प्रदर्शन का उपयोग मिनटों से सेकंड तक चला जाता है। मेरी इच्छा है कि एसक्यूएल व्युत्पन्न तालिकाओं और सीटीई पर बाधाओं का समर्थन करेगा (भले ही केवल एक पीके)।
मैं यहां एक उपेक्षा जोड़ना चाहता हूं क्योंकि यह मुझे स्वीकार किए गए उत्तर के विपरीत सलाह देने के लिए प्रेरित करता है। मैं स्वीकार किए गए उत्तर में प्रस्तुत सोच से सहमत हूं लेकिन यह ज्यादातर सैद्धांतिक है। मेरे अनुभव ने मुझे व्युत्पन्न तालिकाओं, सामान्य तालिका अभिव्यक्तियों और तालिका मूल्य कार्यों पर अस्थायी तालिकाओं की अनुशंसा करने का नेतृत्व किया है। जब तक हमने बड़े परिणाम सेट और/या अधिक जटिल प्रश्नों से निपटना शुरू नहीं किया, तब तक हमने स्वीकार किए गए उत्तर के अनुरूप विचारों के आधार पर अधिक सफलता के साथ व्युत्पन्न तालिकाओं और सामान्य तालिका अभिव्यक्तियों का उपयोग किया। फिर हमने पाया कि अनुकूलक व्युत्पन्न तालिका या सीटीई के साथ अच्छी तरह अनुकूल नहीं था।
मैंने आज एक उदाहरण देखा जो 10:15 के लिए दौड़ गया। मैंने व्युत्पन्न तालिका से परिणामों को एक अस्थायी तालिका में डाला और मुख्य क्वेरी में अस्थायी तालिका में शामिल हो गए और कुल समय 0:03 पर गिर गया। आम तौर पर जब हम एक बड़ी प्रदर्शन समस्या देखते हैं तो हम इसे इस तरह से तुरंत संबोधित कर सकते हैं। इस कारण से मैं temp टेबल की अनुशंसा करता हूं जब तक कि आपकी क्वेरी अपेक्षाकृत सरल न हो और आप निश्चित हैं कि यह बड़े डेटा सेट को संसाधित नहीं करेगा।
- 1. किसके पास तेजी से रनटाइम प्रदर्शन है: डब्ल्यूपीएफ या विनफॉर्म?
- 2. सारणी वर्ग सबसे व्युत्पन्न प्रकार
- 3. एक विधि किसके पास है?
- 4. संग्रहित प्रक्रियाओं में अस्थायी सारणी
- 5. MySQL अस्थायी डिस्क टेबल्स की उच्च संख्या
- 6. एसक्यूएल सर्वर 2008, अस्थायी सारणी अद्वितीय हैं
- 7. बीएसटी लौटने वाले किसके पास है?
- 8. डब्ल्यूपीएफ अस्थायी प्रदर्शन फ्रीज
- 9. परिवर्तन: बाएं संपत्ति पर translateX बनाम संक्रमण। किसके बेहतर प्रदर्शन है? सीएसएस
- 10. MySQL प्रदर्शन - टेबल्स बनाम संख्या। पंक्तियाँ
- 11. MYSQL अस्थायी सारणी - सक्रिय लोगों को कैसे देखें
- 12. प्रदर्शन में दृश्य और सारणी के बीच अंतर
- 13. MySQL संग्रहीत प्रक्रिया में बनाए गए अस्थायी सारणी का दायरा
- 14. शून्य परिणाम के साथ जेडीबीसी का उपयोग कर अस्थायी सारणी
- 15. प्रदर्शन के मामले में, जो बेहतर फ्लेक्स या सिल्वरलाइट है?
- 16. अस्थायी सारणी कहां SQL सर्वर में संग्रहीत करें?
- 17. MySQL प्रक्रियाओं में अद्वितीय अस्थायी सारणी कैसे बनाएं?
- 18. SharePoint सूचियाँ बनाम डाटाबेस टेबल्स प्रदर्शन
- 19. syslog प्रदर्शन बेहतर हो सकता है?
- 20. प्रदर्शन के मामले में बेहतर क्या है?
- 21. PHP में बेहतर प्रदर्शन कौन सा है?
- 22. एसक्यूएल सर्वर का चयन में और अस्थायी टेबल्स के साथ ब्लॉक कर रहा है
- 23. क्या बेहतर है: डेटासेट या डेटा रीडर?
- 24. कौन सा बेहतर है, एनएसएससेट के पास ऑब्जेक्ट या फास्ट एनम है?
- 25. जो बेहतर है - Ext.get() या document.getElementById()
- 26. क्या आपके पास रीशेपर और/या विजुअल स्टूडियो प्रदर्शन को बेहतर बनाने के लिए कोई सुझाव है?
- 27. किसके लिए उपयोग करना आसान है? जीसीडी या एनएसओपरेशन?
- 28. वो किसके लिए खड़ा है?
- 29. लिंक में अस्थायी सारणी - किसी को भी इस में कोई समस्या दिखाई देती है?
- 30. डाटाबेस डिजाइन - एकाधिक लुकअप/एनम टेबल्स या एक बड़ी टेबल?
@tableVariables के बारे में क्या ;-) –
@ केएम: आप यहां भयानक ताकतों के साथ खेल रहे हैं। – Quassnoi