2010-01-29 14 views
5

SQL सर्वर 2005 में, जब मैं लिखनेएक प्रश्न में दो बार एक ही समारोह का उपयोग करना (SQL सर्वर)

SELECT m.*, a.price p1, b.price p2 
FROM mytable m 
LEFT JOIN products_table_1 a 
ON my_hash_function(m.name) = a.hash 
LEFT JOIN products_table_2 b 
ON my_hash_function(m.name) = b.hash 

की तरह एक प्रश्न my_hash_function(m.name) दो बार या सिर्फ एक बार गणना की जाती है? यदि दो बार, तो मैं इससे बचने के लिए एक चर का उपयोग कैसे कर सकता हूं?

उत्तर

2

निष्पादन योजना से पता चलता है कि यह वास्तव में दो बार निष्पादित हो जाता है। लेकिन यह केवल तभी होता है जब फ़ंक्शन निर्धारक नहीं है। फ़ंक्शन को निर्धारक होने के क्रम में, इसे WITH SCHEMABINDING विकल्प परिभाषित किया जाना चाहिए, और यह जो भी फ़ंक्शन कॉल करता है वह भी निर्धारक होना चाहिए। मैंने हैश फ़ंक्शन को निर्धारिती के रूप में परिभाषित करने के बाद, योजना बदल दी है। अब यह केवल एक बार निष्पादित हो जाता है!

हालांकि, अगर आप उस सामान से परेशान नहीं होना चाहते हैं, तो momobo का समाधान भी ठीक है।

7
select mm.*, a.price p1, b.price p2 from 
    (SELECT m.*, my_hash_function(m.name) as name 
    FROM mytable m) mm 
    LEFT JOIN products_table_1 a 
    ON mm.name = a.hash 
    LEFT JOIN products_table_2 b 
    ON mm.name = b.hash 
+0

ओह, मुझे विचार मिलता है। धन्यवाद! क्या आप जानते हैं कि इसे दो बार निष्पादित किया जाएगा या नहीं? – ercan

+0

मुझे लगता है कि यह अनुकूलक तर्क पर निर्भर करता है। मुझे नहीं पता लेकिन मुझे लगता है कि यह नहीं होगा। – momobo

संबंधित मुद्दे