से बाहर है, मुझे SQL सर्वर (2005) से एक विचित्र निष्पादन योजना व्यवहार मिलता है।एसक्यूएल सर्वर: पंक्तियों की अनुमानित संख्या
TableName:
SELECT *
FROM (SELECT ROW_NUMBER() OVER (ORDER BY ID DESC) as Row,
ID, Name
FROM Log) AS LogWithRowNumbers
WHERE Row >= 1
AND Row <= 2
यह: लॉग
... 1000 पंक्तियाँ
- आईडी पूर्णांक
- नाम varchar (50)
क्वेरी के आसपास होता है संख्या का अनुमान लगाता है पंक्तियों का बियर 9 के रूप में लौटा (हालांकि यह एक स्पष्ट 2 या कम है)।
इसके अलावा , को हटाने "और पंक्ति < = 2" के बारे में * 5. द्वारा निष्पादन समय में वृद्धि होगी ("और पंक्ति < = 2" और "और पंक्ति < = 9999999999999" एक ही व्यवहार करते हैं)
मैंने अद्यतन आंकड़े लेकिन फिर भी, यह व्यवहार अजीब है। पंक्ति < 99999999999 जोड़ना क्वेरी को तेजी से चलाएगा? क्यूं कर ?
लोग चलो, यह आसानी से reproducable है। जब आपको उनकी आवश्यकता होती है तो उन डीबीए प्रतिभा कहां हैं ?? – Faruz
@ फ़ारज़: मैं डीबीए नहीं हूं। लेकिन क्या क्वेरी तेज होती है जब आपके पास बिना किसी AND/OR (यानी ROW = 1) के एकल मानदंड होते हैं। '> =' और '<=' का उपयोग करने के विरुद्ध 'ROW = 1 या ROW = 2' के दौरान यह कैसा प्रदर्शन करता है। क्या यह आंतरिक रूप से 'लॉग' तालिका के लिए कोई अनुक्रमणिका बनाता है? – shahkalpesh
पंक्ति = 1 या पंक्ति = 2 अनुमानित 58 पंक्तियों को वापस कर दिया ... यह एक आंतरिक सूचकांक नहीं बनाता है लेकिन पीके इंडेक्स (आईडी) का उपयोग करता है। – Faruz