SARGability पर एक सवाल


11

मुझे बस यह पुष्टि करने की आवश्यकता है कि मैं कुछ सही ढंग से समझता हूं:

मैंने हाल ही में एक SO प्रश्न देखा जिसमें एक उपयोगकर्ता ने Linq में उत्तर पोस्ट किया जैसे:

from p in db.table where p.column.AddMinutes(1) > DateTime.Now select p

Linq से अपरिचित लोगों के लिए, मैं उस कथन के आउटपुट की उम्मीद करूँगा (निष्पक्षता में इसका परीक्षण नहीं):

SELECT *
FROM table t
WHERE DATEADD(min, 1, t.column) >= GETDATE() 

मैंने यह कहते हुए एक उत्तर पोस्ट किया कि डेटाटाइम हेरफेर चर पर होना चाहिए (इस मामले में GETDATE()) इसलिए वास्तव में बयान में कुछ होना चाहिए:

SELECT *
FROM table t
WHERE t.column >= DATEADD(min, -1, GETDATE())

मेरे जवाब में, बिट्स अब मैं अनिश्चित हूँ, निम्नलिखित मान लें:

  1. स्तंभ के हेरफेर के कारण अनुक्रमित का उपयोग नहीं किया जाएगा
  2. उपर्युक्त के कारण क्वेरी योजनाएँ अलग-अलग होंगी (परीक्षण नहीं किया गया है, ऐसा मानते हुए)
  3. उपरोक्त के कारण, 1 क्वेरी वास्तव में 2 वें से भी बदतर प्रदर्शन करेगी।

मेरा प्रश्न:

क्या मुझे अपने तर्क में कुछ याद नहीं है? क्या मैं सही हूँ? अंत में, क्या किसी भी संस्था के पास SARGability पर कोई अच्छा लेख है?

जवाबों:


6
  1. सही बात
  2. जरूरी नहीं - यह इस पर निर्भर करता है कि क्या एक उपयुक्त सूचकांक मौजूद है और क्या सीबीओ इसका उपयोग करने का निर्णय लेता है। उदाहरण के लिए यदि तालिका छोटी है या आँकड़े ऑप्टिमाइज़र को विश्वास दिलाते हैं कि फ़िल्टर परिणाम के बड़े प्रतिशत के लिए सही होगा, तो यह एफटीएस की लागत कम होने पर विचार कर सकता है
  3. इसकी गारंटी नहीं है - यह भी संभव है कि दूसरा क्वेरी खराब प्रदर्शन करेगा - लेकिन आपका तर्क मूल रूप से ध्वनि है। उदाहरण के लिए, एक किनारे के मामले में जब एक एफटीएस वास्तव में तेज होगा, सीबीओ लागत के अपने सर्वोत्तम अनुमान के आधार पर एक इंडेक्स स्कैन चुन सकता है - जो हमेशा केवल एक अनुमान है

थोड़ी सी गुगली ने इस SO प्रश्न को और SARGability पर इस दिलचस्प दिखने वाले लेख को बदल दिया


5

जैक का अधिकार, इसलिए मैं उसे नहीं दोहराऊंगा।

मैं बस कुछ लेख जोड़ूंगा, जिन्हें मैं अभिव्यक्ति की सरगर्मी के बारे में पसंद करता हूं:

SQL सर्वर के बहुत सारे अनुभव के साथ वे सभी महान लेखक हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.