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

क्या ISNULL में अशक्त स्तंभों को लपेटने से तालिका स्कैन होती है?

हाँ यह टेबल स्कैन का कारण बनता है। (यद्यपि यदि कॉलम वास्तव में अशक्त नहीं है तो अनुकूलित हो जाता है)

SR0007 नियम बेहद खराब कंबल सलाह है क्योंकि यह विधेय को अप्राप्य बनाता है और इसका मतलब है कि कॉलम पर कोई भी अनुक्रमणिका बेकार होगी। यहां तक ​​​​कि अगर कॉलम पर कोई इंडेक्स नहीं है, तब भी यह योजना के अन्य हिस्सों को प्रभावित करने वाले कार्डिनैलिटी अनुमानों को गलत बना सकता है।

Microsoft.Performance . में इसका वर्गीकरण श्रेणी काफी मनोरंजक है क्योंकि ऐसा लगता है कि यह किसी ऐसे व्यक्ति द्वारा लिखा गया है जिसे क्वेरी प्रदर्शन की कोई समझ नहीं है।

यह दावा करता है कि तर्क है

जबकि एक्सप्रेशन ही unknown . का मूल्यांकन करता है एक बार जब आप समझ जाते हैं कि कोई = . तो आपका कोड पूरी तरह से नियतात्मक परिणाम देता है , <> , > , < आदि की तुलना NULL . से करें unknown . के रूप में मूल्यांकन करें और वह WHERE क्लॉज केवल उन पंक्तियों को लौटाता है जहां अभिव्यक्ति का मूल्यांकन true . होता है ।

यह संभव है कि उनका मतलब ANSI_NULLS से है बंद है लेकिन उदाहरण वे WHERE ISNULL([c2],0) > 2; के दस्तावेज़ीकरण में देते हैं बनाम WHERE [c2] > 2; वैसे भी इस सेटिंग से प्रभावित नहीं होगा। यह सेटिंग

निष्पादन योजनाएं स्कैन बनाम तलाश या नीचे दिखा रही हैं

CREATE TABLE #foo
  (
     x INT NULL UNIQUE
  )

INSERT INTO #foo
SELECT ROW_NUMBER() OVER (ORDER BY @@SPID)
FROM   sys.all_columns

SELECT *
FROM   #foo
WHERE  ISNULL(x, 10) = 10

SELECT *
FROM   #foo
WHERE  x = 10

SELECT *
FROM   #foo
WHERE  x = 10
        OR x IS NULL 




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2016:एक तालिका बनाएँ

  2. कौन सी सेटिंग्स SQL ​​सर्वर डिफ़ॉल्ट डेटाटाइम प्रारूप प्रदान करती हैं?

  3. SQL सर्वर में फॉर-लूप का सिंटैक्स

  4. एकाधिक डेटाबेस में दृश्य बनाएं

  5. SQL सर्वर 2008 में TO_Char () का उपयोग कैसे करें?