2010-03-15 12 views
15

में बड़ी तालिकाओं के साथ कुशल पेजिंग> 1,000,000 पंक्तियों और संभवतः कई अन्य लोगों के साथ तालिकाओं के लिए!एसक्यूएल 2008

ने खुद को कोई बेंचमार्किंग नहीं किया है, इसलिए विशेषज्ञों की राय प्राप्त करना चाहता था।

ROW_NUMBER() पर कुछ लेख को देखा, लेकिन यह प्रदर्शन निहितार्थ

अन्य विकल्प/विकल्प क्या हैं के लिए लगता है?

+0

क्या आप उन लेखों को साझा करना चाहते हैं जो row_number() नहीं दिखाते हैं ... –

+0

सभी सबसे छोटी प्रश्नों के लिए इंडेक्स और अद्यतित आंकड़ों को अच्छी तरह से करने की आवश्यकता होती है। –

+0

डुप्लिकेट: http://stackoverflow.com/questions/1897436/row-number-over-not-fast-enough-with-large-result-set-any-good-solution –

उत्तर

18

हम row_number() का उपयोग बहुत प्रभाव के लिए करते हैं और वास्तव में इसके साथ कोई प्रदर्शन समस्या नहीं रही है। हमारे पेजिनेटेड प्रश्नों की मूल संरचना इस तरह दिखती है:

WITH result_set AS (
    SELECT 
    ROW_NUMBER() OVER (ORDER BY <ordering>) AS [row_number], 
    x, y, z 
    FROM 
    table 
    WHERE 
    <search-clauses> 
) SELECT 
    * 
FROM 
    result_set 
WHERE 
    [row_number] BETWEEN a AND b 

यह 1,000,000 पंक्तियों के साथ तालिकाओं पर हमारे लिए ठीक काम करता है।

+0

मुझे लगता है कि प्रदर्शन दूसरों के बीच सर्वर लोड और सर्वर संसाधनों का एक फ़ंक्शन है, कृपया एक वैकल्पिक पीओवी – Kumar

+2

के लिए ऊपर दी गई मेरी टिप्पणियों में दो लिंक देखें, जैसा कि मैंने कहा था, हम वास्तव में इसे 1,000,000 रिकॉर्ड के साथ तालिकाओं पर उत्पादन में उपयोग करते हैं। परिणाम <100ms में वापस आते हैं (निश्चित रूप से खोज मानदंडों के आधार पर)। बेशक प्रदर्शन सर्वर लोड का एक फंक्शन होगा, और यह भी आपके विशिष्ट उपयोग परिदृश्य होगा। –

+1

मुझे लगता है कि आपके पास पर्याप्त मात्रा में रैम है, ताकि तालिका पूरी तरह से कैश हो। मैंने बस एक साधारण टेबल 'व्यक्ति (ईमेल, पहला नाम, अंतिम नाम)' के साथ कोशिश की जिसमें 3.000.000 रिकॉर्ड हैं लेकिन पिछले रिकॉर्ड के लिए पेजिनेट करने के लिए उपर्युक्त क्वेरी के साथ 6 सेकंड लगते हैं। मैं एसक्यूएल सर्वर 2008 आर 2 का उपयोग कर रहा हूँ। क्या मैं कुछ भुल गया। – broadband

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