हमारे पास कई "खोज संग्रहित प्रक्रियाएं" हैं जो विभिन्न तालिकाओं में डेटा की पंक्तियों को खोजने के लिए कई निरर्थक पैरामीटर लेती हैं। वे आम तौर पर इस तरह का निर्माण कर रहे हैं:टी-एसक्यूएल - गैर इष्टतम योजना का उपयोग किया जाता है - WHERE क्लॉज शॉर्टरक्यूइट किया जाना चाहिए
SELECT *
FROM Table1 T1
INNER JOIN Table2 T2
ON T2.something = T1.something
WHERE (@parameter1 IS NULL OR T1.Column1 = @parameter1)
AND (@parameter2 IS NULL OR T2.Column2 = @parameter2)
AND (@parameter3 IS NULL OR T1.Column3 LIKE '%' + @parameter3 + '%')
AND (@parameter4 IS NULL OR T2.Column4 LIKE '%' + @parameter4 + '%')
AND (@parameter5 IS NULL OR T1.Column5 = @parameter5)
यह अप करने के लिए 30-40 मापदंडों के लिए पर जा सकते हैं और क्या हमने देखा है कि भले ही parameter1 प्रदान की जाती है, कार्य योजना लागू करके अन्य के सूचकांक स्कैन के माध्यम से चला जाता है सारणी जो क्वेरी को धीमा कर सकती हैं (कुछ सेकंड)। टेस्ट हमें दिखाते हैं कि WHERE कथन से केवल पहली पंक्ति को रखते हुए क्वेरी तुरंत होती है।
मैं पढ़ा है कि shortcuiting संभव नहीं है, लेकिन वहाँ के आसपास काम या प्रश्नों कि संभवतः अधिक कुशल हो जाएगा का निर्माण करने के तरीके हैं?
हम वर्तमान में चयन ही के विभिन्न संस्करणों के होने से इस समस्या को हल/से/कार्यभार संभाला लेकिन मानकों के विभिन्न सेट के साथ कहां खंड में और पर निर्भर करते हुए मापदंडों पारित कर रहे हैं हम के माध्यम से जाने के लिए उचित चयन बयान चुनें। यह लंबे, गन्दा और बनाए रखने के लिए मुश्किल है।
क्या आपने [गतिशील एसक्यूएल] (http://www.sommarskog.se/dynamic_sql.html) का उपयोग करने पर विचार किया है? यहां तक कि [एसक्यूएल इंजेक्शन] (http://en.wikipedia.org/wiki/SQL_injection) के साथ भी यह आपकी आवश्यकताओं के लिए अधिक उपयुक्त हो सकता है। – Oded
पैरामीटरकृत गतिशील एसक्यूएल और एसक्यूएल इंजेक्शन बनाना कोई समस्या नहीं है – StrayCatDBA
मैं गतिशील एसक्यूएल पर एक बार फिर से देखूंगा, लेकिन ऐसा लगता है कि हम चीजों को कैसे करते थे और एसक्यूएल कोड के जटिल तारों को स्वयं अनुप्रयोगों के साथ बनाते थे ऐसी परिस्थितियों का समूह जो त्वरित नज़र में क्वेरी को समझना लगभग असंभव बना देता है। उन प्रश्नों के लिए एसक्यूएल प्रबंधन स्टूडियो के भीतर वाक्यविन्यास हाइलाइटिंग/टूल्स रखने का कोई तरीका भी है? – FrancoisCN