के रूप में सहेजा गया है, तो मुझे लगता है कि SQL सर्वर एक आईटीवीएफ में अपना कोड लपेटते समय पूरी तरह से अलग निष्पादन योजना क्यों ले रहा है। आईटीवीएफ के अंदर कोड चलाते समय, क्वेरी 5 सेकंड में चलती है। अगर मैं इसे आईटीवीएफ के रूप में सहेजता हूं, तो यह 20 मिनट तक चलता है और नतीजा नहीं देता है। कोड कोड पुन: उपयोग के लिए मैं इसे आईटीवीएफ में रखना पसंद करूंगा। किसी भी विचार से आईटीवीएफ के रूप में कोड को सहेजने से गंभीर प्रदर्शन के मुद्दे क्यों होंगे?टी-एसक्यूएल कोड बेहद धीमा है जब इनलाइन टेबल-मूल्यवान फ़ंक्शन
CREATE FUNCTION myfunction
(
@start_date date,
@stop_date date
)
RETURNS TABLE
AS
RETURN
(
with
ad as (
select [START_DATE]
,[STOP_DATE]
,ID
,NAME
,'domain1\' + lower(DOMAIN1_NAME)
collate database_default as ad_name
from EMP_INFO
where DOMAIN1_NAME != ''
union
select [START_DATE]
,[STOP_DATE]
,ID
,NAME
,'domain2\' + lower(DOMAIN2_NAME)
collate database_default as ad_name
from EMP_INFO
where DOMAIN2_NAME != ''
)
select ad.ID
,ad.NAME
,COUNT(*) as MONITORS
from scores
join users
on (scores.evaluator_id = users.[user_id])
join ad
on (lower(users.auth_login) = ad.ad_name and
scores.[start_date] between ad.[START_DATE] and ad.[STOP_DATE])
where scores.[start_date] between @start_date and @stop_date
group by ad.ID
,ad.NAME
)
संपादित करें:
ठीक है ... मुझे लगता है कि मैं इस समस्या पता लगा ... लेकिन मैं यह समझ में नहीं आता। संभवतः मुझे एक बिल्कुल नया सवाल पोस्ट करना चाहिए, मुझे बताएं कि आप क्या सोचते हैं। यहां मुद्दा यह है कि जब मैं फ़ंक्शन को फ़ंक्शन के साथ कॉल करता हूं, तो यह वास्तव में धीमा होता है ... जब मैं इसे चर के साथ कॉल करता हूं तो यह तेज़ होता है।
-- Executes in about 3 seconds
declare @start_date date = '2012-03-01';
declare @stop_date date = '2012-03-31';
select *
from myfunction(@start_date, @stop_date);
--Takes forever! Never completes execution...
select *
from myfunction('2012-03-01', '2012-03-31')
कोई विचार?
शुरुआत '(कम (users.auth_login) = ad.ad_name' के लिए मार किया जा सकता है चालू गैर SARGable है – SQLMenace
अच्छा! नहीं था एसएआरजी से परिचित, अच्छी जानकारी। मैंने निचले() फ़ंक्शन को हटा दिया है और मुझे अभी भी एक ही समस्या है। असल में, मैंने तर्क को एक दृश्य में अलग कर दिया है, कुल भाग को हटा दिया है, और मैं कुल कर सकता हूं दृश्य पर काम करें। लेकिन एक बार फिर, अगर मैं किसी फ़ंक्शन में उस दृश्य को लपेटता हूं, तो मुझे एक ही समस्या मिलती है ... – pyrospade
क्या आप इनलाइन और गैर-इनलाइन निष्पादन योजना पोस्ट कर सकते हैं? – EBarr