हां यह टेबल स्कैन का कारण बनता है। (हालांकि कॉलम वास्तव में शून्य नहीं है)
SR0007 नियम बेहद खराब कंबल सलाह है क्योंकि यह भविष्यवाणी करने योग्य नहीं है और इसका मतलब है कि कॉलम पर कोई भी अनुक्रमणिका बेकार होगी। यहां तक कि अगर कॉलम पर कोई इंडेक्स नहीं है, तो भी यह कार्डिनिटी का अनुमान लगा सकता है कि योजना के अन्य हिस्सों को गलत तरीके से प्रभावित किया जा सकता है।
Microsoft.Performance
श्रेणी में इसका वर्गीकरण काफी मनोरंजक है क्योंकि ऐसा लगता है कि क्वेरी प्रदर्शन की कोई समझ नहीं है।
यह तर्क का दावा है
अपने कोड दो शून्य मान तुलना या किसी अन्य मूल्य के साथ एक शून्य मूल्य, अपने कोड एक अज्ञात परिणाम वापस आ जाएगी तो है।
एक बार आप समझते हैं कि NULL
के साथ किसी भी =
, <>
, >
, <
आदि तुलना Unknown
के रूप में मूल्यांकन करें और WHERE
खंड केवल पंक्तियों जहां रिटर्न कि जबकि अभिव्यक्ति ही unknown
अपने कोड एक पूरी तरह से नियतात्मक परिणाम देता है के लिए मूल्यांकन करता है अभिव्यक्ति 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
स्रोत
2011-09-19 13:35:57
नीचे 'आदेश BY' खंड में है कि वाक्य रचना है क्या दिखा योजना है? (मैंने गुगल किया है लेकिन इसके लिए Google के लिए कुछ मुश्किल है ...) – AakashM
@AakashM - यह संख्याओं का आरोही अनुक्रम प्राप्त करने के क्रम में निरंतर क्रमबद्ध करने के लिए अब तक कम से कम टाइपिंग तरीका है। 'ओवर (ऑर्डर (चयन 0)) 'या' ओवर (@@ spid द्वारा ऑर्डर) 'विकल्प हैं। आप एक शाब्दिक निरंतर मान का उपयोग नहीं कर सकते क्योंकि SQL सर्वर आपको एक त्रुटि देता है। शून्य से विभाजित होने से इसे शाब्दिक स्थिर माना जाता है। आप '1/0' का उपयोग तब SQL सर्वर चीजों के रूप में नहीं कर सकते जो आप एक पूर्णांक कॉलम ordinal द्वारा ऑर्डर करने का प्रयास कर रहे हैं और एक त्रुटि फेंकता है। –
ओह, मैं देखता हूं, '$' को मूल्य शून्य के साथ 'धन' शब्दशः के रूप में व्याख्या किया जाता है! पार्सर से यह आश्चर्यजनक उदारता है, मुझे कहना है :) – AakashM