15

मैं बड़ा ROW_NUMBER (एसक्यूएल सर्वर 2008) के संदर्भ में कुछ प्रश्न हैं और नए OFFSET + FETCH (SQL सर्वर 2012) पेजिंग तंत्र एसक्यूएल सर्वर द्वारा प्रदान की 2012.पुरानी row_number() और SQL सर्वर में नए ऑफ़सेट + फ़ेच आधारित पेजिनेशन के बीच अंतर क्या हैं?

  1. क्या ROW_NUMBER साथ सीमाएं हैं() ?
  2. ऑफसेट + + row_number() के लिए एक बेहतर प्रतिस्थापन प्राप्त करें?
  3. क्या कोई उपयोग-मामले हैं जो केवल एक का उपयोग करके पर्याप्त हो सकता है, न कि दूसरे?
  4. क्या दोनों के बीच कोई प्रदर्शन अंतर है? यदि हां, तो किसकी सिफारिश की जाती है?

धन्यवाद।

+2

क्या आपने चारों ओर जांच की है? इस व्यापक उत्तर को देखें: http://dba.stackexchange.com/questions/30210/why-are-there-execution-plan-differences-between-offset-fetch-and-the-old-st –

उत्तर

13

ROW_NUMBER() का उपयोग ठीक काम करता है - यह आवश्यक से अधिक काम है; आपको अपनी वास्तविक क्वेरी के आस-पास एक "कंकाल" सीटीई लिखना होगा, अपने आउटपुट सेट में ROW_NUMBER() कॉलम जोड़ें, और फिर उस पर फ़िल्टर करें।

नई OFFSET/FETCH का उपयोग करना आसान है - और हाँ, यह भी प्रदर्शन के लिए बेहतर है, के रूप में इन दोनों लिंक आपको दिखाते हैं कर सकते हैं:

तो समग्र: यदि आप SQL सर्वर 2012 का उपयोग कर - तो आपको निश्चित रूप से का उपयोगके बजाय करना चाहिए पेजिंग

+0

यह काफी ईमानदार दिखता है , लेकिन मुझे आश्चर्य है कि मैं 2012 एसक्यूएल सर्वर के साथ ईएफ उपयोग ऑफसेट को कैसे मजबूर कर सकता हूं? –

1

के लिएपेजिंग के इस लेख 3 तकनीक की तुलना और चार्ट में परिणाम अनुसार

Sql Server 2012 Paging Methods

छोटे रिकॉर्ड काम ठीक की संख्या में पेजिंग विधि के सभी लेकिन जब बढ़ता संख्या पेजिंग के लिए विधि का चयन करने के लिए उपयोगी है समय के अंतर के बाद रिकॉर्ड का वजन कमजोर तरीके सीधे लगता है

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