2010-12-11 15 views
5

SQL Server 2008 में कौन सा बेहतर है या इससे कोई फर्क नहीं पड़ता डेटाबेस डेटाबेस अनुकूलित करता है।तालिका की SQL अधिकतम पंक्ति

SELECT * FROM table 
WHERE datecolumn = (SELECT max(datecolumn) FROM table); 


SELECT TOP 1 * FROM table ORDER BY datecolumn DESC; 
+3

लागत में काफी अंतर कर सकता है, वे अलग-अलग परिणाम उत्पन्न कर सकते हैं। शीर्ष उदाहरण एक से अधिक पंक्ति (मूल रूप से सबसे बड़ी तारीख से मेल खाने वाली प्रत्येक पंक्ति) वापस कर सकता है। निचली क्वेरी केवल 1 पंक्ति लौटाती है (और टाई तिथियों के बारे में कुछ भी नहीं करती है) – Sparky

उत्तर

9

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

एक बात यह जानना है कि दोनों प्रश्न एक ही परिणाम वापस नहीं कर सकते हैं। दूसरा एसक्यूएल हमेशा एक रिकॉर्ड लौटाएगा जहां पहला रिकॉर्ड कई पंक्तियों को वापस कर सकता है यदि datecolumn अद्वितीय नहीं है।

0

आपको उत्तर में निष्पादन योजना को देखने की आवश्यकता है।

0

चयन करें * तालिका से दिनांक दिनांक = = तालिका से अधिकतम (दिनांक कक्ष) चुनें;

दिनांक 1 से चुनें * दिनांक तालिका से दिनांक दिनांक डीईएससी;

ये क्वेरी लागत में अंतर का परिणाम वापस कर देगी। एसक्यूएल सर्वर निष्पादन से पहली क्वेरी की योजना है। उप क्वेरी पहले चलती है और टेबल टुपल्स स्कैन करती है और अधिकतम दिनांक कॉलम प्राप्त करती है जिसके बाद बाहरी क्वेरी टेबल स्कैन करेगी और डेटाकोम = के लिए खोज करेगी ..... इस तरह दक्षता नहीं है।

दूसरी क्वेरी अधिक दक्षता है क्योंकि एक बार में तालिका के केवल एक स्कैन टुपल्स हैं।

नोट के लिए: यदि डेटाकॉलम प्राथमिक कुंजी या अनुक्रमणिका कॉलम है, तो यह दोनों क्वेरी का महत्वपूर्ण अंतर नहीं है। लेकिन यदि यह कॉलम इंडेक्स और प्राथमिक कुंजी नहीं है, तो यह

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