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