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

वही प्रश्न - विभिन्न निष्पादन योजनाएं

प्रश्न 2 एक चर का उपयोग करता है।

जिस समय बैच को संकलित किया जाता है उस समय SQL सर्वर को वेरिएबल का मान नहीं पता होता है, इसलिए OPTIMIZE FOR (UNKNOWN) के समान ही ह्युरिस्टिक्स पर वापस आ जाता है।

> . के लिए यह मान लेगा कि 30% पंक्तियाँ मेल खाती हैं (या आपके उदाहरण डेटा में 3000 पंक्तियाँ)। इसे निष्पादन योजना छवि में नीचे के रूप में देखा जा सकता है। यह 12 पंक्तियों (0.12%) से काफी ऊपर और ऊपर है जो टिपिंग पॉइंट इस क्वेरी के लिए कि क्या यह क्लस्टर्ड इंडेक्स स्कैन या गैर-क्लस्टर इंडेक्स सीक और की लुकअप का उपयोग करता है।

आपको OPTION (RECOMPILE) . का उपयोग करना होगा नीचे दी गई तीसरी योजना में दिखाए गए अनुसार वास्तविक परिवर्तनीय मूल्य को ध्यान में रखते हुए इसे प्राप्त करने के लिए।

स्क्रिप्ट

CREATE TABLE #Sale
(
    SaleId INT IDENTITY(1, 1)
        CONSTRAINT PK_Sale PRIMARY KEY,
    Test1 VARCHAR(10) NULL,
    RowVersion rowversion NOT NULL
        CONSTRAINT UQ_Sale_RowVersion UNIQUE
)

/*A better way of populating the table!*/
INSERT INTO #Sale (Test1)
SELECT TOP 10000 NULL 
FROM master..spt_values v1, master..spt_values v2

GO

SELECT *
FROM #Sale
WHERE RowVersion > 0x000000000001C310-- Query #1


DECLARE @LastVersion rowversion = 0x000000000001C310

SELECT *
FROM #Sale
WHERE RowVersion > @LastVersion-- Query #2


SELECT *
FROM #Sale
WHERE RowVersion > @LastVersion
OPTION (RECOMPILE)-- Query #3

DROP TABLE #Sale


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. यदि स्टेटमेंट में UNION, INTERSECT या EXCEPT ऑपरेटर (SQL सर्वर) शामिल है, तो ORDER BY आइटम्स को चुनिंदा सूची में दिखाई देना चाहिए।

  2. SQL सर्वर में DBF फ़ाइल कैसे आयात करें

  3. विजुअल स्टूडियो:ContextSwitchDeadlock

  4. SQL सर्वर में लॉगऑन ट्रिगर

  5. SQL सर्वर एजेंट अलर्ट