Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL में पृष्ठ पर अंक लगाना - प्रदर्शन समस्या

मैं हमेशा जांचता हूं कि मैं क्वेरी में कितना डेटा एक्सेस कर रहा हूं और अनावश्यक कॉलम के साथ-साथ पंक्तियों को खत्म करने का प्रयास करता हूं। वैसे ये केवल स्पष्ट बिंदु हैं जिन्हें आपने पहले ही जांच लिया होगा, फिर भी यदि आप पहले से नहीं हैं तो केवल इंगित करना चाहते हैं। क्वेरी धीमा प्रदर्शन हो सकता है क्योंकि आप "चयन करें *" कर रहे हैं। तालिका से सभी स्तंभों का चयन करना अच्छी निष्पादन योजना के साथ आने की अनुमति नहीं देता है। जांचें कि क्या आपको केवल चयनित कॉलम चाहिए और सुनिश्चित करें कि आपके पास टेबल ऑर्डर पर सही कवरिंग इंडेक्स है।

चूंकि SQL 2008 संस्करण में स्पष्ट SKIPP या OFFSET फ़ंक्शन उपलब्ध नहीं है, इसलिए हमें एक बनाने की आवश्यकता है और जिसे हम INNER JOIN द्वारा बना सकते हैं। एक प्रश्न में हम पहले ऑर्डरडेट के साथ आईडी जेनरेट करेंगे और उस क्वेरी में और कुछ नहीं होगा। हम वही करते हैं दूसरी क्वेरी में, लेकिन यहां हम तालिका ORDER या ALL से कुछ अन्य इच्छुक कॉलम भी चुनते हैं यदि आपको सभी कॉलम की आवश्यकता है। फिर हम आईडी और ऑर्डरडेट द्वारा परिणामों को क्वेरी करने के लिए इसमें शामिल होते हैं और पहली क्वेरी के लिए SKIPP पंक्तियों को फ़िल्टर करते हैं जहां डेटा सेट अपने न्यूनतम आकार में होता है क्या आवश्यक है। इस कोड को आजमाएं।

    SELECT q2.*
    FROM
    (
        SELECT ROW_NUMBER() OVER ( ORDER BY OrderDate ) AS RowNum, OrderDate
        FROM      Orders
        WHERE     OrderDate >= '1980-01-01'
    )q1
    INNER JOIN 
    (
        SELECT ROW_NUMBER() OVER ( ORDER BY OrderDate ) AS RowNum, *
        FROM      Orders
        WHERE     OrderDate >= '1980-01-01'
    )q2
        ON q1.RowNum=q2.RowNum AND q1.OrderDate=q2.OrderDate AND q1.rownum BETWEEN 30000 AND 30020
    IF object_id('TestSelect','u') IS NOT NULL
        DROP TABLE TestSelect
    GO
    CREATE TABLE TestSelect
    (
        OrderDate   DATETIME2(2)
    )
    GO

    DECLARE @i bigint=1, @dt DATETIME2(2)='01/01/1700'
    WHILE @I<=2000000
    BEGIN

        IF @i%15 = 0
            SELECT @DT = DATEADD(DAY,1,@dt)

        INSERT INTO dbo.TestSelect( OrderDate )
        SELECT @dt

        SELECT @[email protected]+1
    END
    SELECT q2.*
    FROM
    (
        SELECT  ROW_NUMBER() OVER ( ORDER BY OrderDate ) AS RowNum 
                ,OrderDate
        FROM TestSelect
        WHERE OrderDate >= '1700-01-01'
    )q1
    INNER JOIN
    (
        SELECT  ROW_NUMBER() OVER ( ORDER BY OrderDate ) AS RowNum 
                ,*
        FROM TestSelect
        WHERE OrderDate >= '1700-01-01'
    )q2
        ON q1.RowNum=q2.RowNum 
        AND q1.OrderDate=q2.OrderDate 
        AND q1.RowNum BETWEEN 50000 AND 50010



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SSRS 2008 R2 के रिपोर्ट बॉडी में पेज नंबर कैसे प्रदर्शित करें?

  2. सी # कोड के माध्यम से SQL सर्वर डेटाबेस को कैसे पुनर्स्थापित करें

  3. एमएस-एसक्यूएल सर्वर पर, सभी वस्तुओं के बीच सभी निर्भरताओं को प्राप्त करने के लिए सबसे अच्छा टूल क्या है?

  4. सी # में एसक्यूएल परिभाषित फ़ंक्शन को कॉल करना

  5. SQL सर्वर का उपयोग करके सॉफ़्टवेयर संस्करणों की तुलना कैसे करें?