मैं अपनी डेटा एक्सेस परत पर एंटीटी फ्रेमवर्क 5, ऑब्जेक्ट कॉन्टेक्स्ट और पीओसीओ का उपयोग कर रहा हूं। मेरे पास एक सामान्य श्वसन कार्यान्वयन है और मेरे पास एक तरीका है जो छोड़कर() और टेक() का उपयोग करके पेजिंग के साथ डेटाबेस से पूछताछ करता है। सब कुछ ठीक काम करता है, सिवाय इसके कि क्वेरी प्रदर्शन बहुत धीमी है जब बहुत सी पंक्तियाँ (मैं 170k के बारे में बात कर रहा हूँ पंक्तियों)इकाई फ्रेमवर्क छोड़ने की विधि बहुत धीमी गति से चल रही है
यह संस्थाओं के लिए LINQ पर अपनी क्वेरी का एक अंश है लंघन:
सी # कोड :
ObjectContext oc = TheOBJEntitiesFactory.CreateOBJEntitiesContext(connection);
var idPred = oc.CreateObjectSet<view_Trans>("view_Trans").AsQueryable();
idPred = idPred.OrderBy(sortColumn, sortDirection.ToLower().Equals("desc"));
var result = idPred.Skip(iDisplayStart).Take(iDisplayLength);
return new PagedResult<view_Trans>(result, totalRecords);
अनुवाद क्वेरी में लेन-देन-एसक्यूएल को मैंने देखा है कि बजाय ROW_NUMBER() दृश्य सीधे अपने एक उप क्वेरी बनाने और ROW_NUMBER लागू करने के क्लॉज() का उपयोग करने का उप क्वेरी के परिणामों ... को
उदाहरण:
select top(10) extent1.A, extent1.B.extent1.C from (
select extent1.A, extent1.B, extent1.C,
row_number() OVER (ORDER BY [Extent1].[A] DESC) AS [row_number]
from (
select A,B,C from table as extent1)) as extent1
WHERE [Extent1].[row_number] > 176610
ORDER BY [Extent1].[A] DESC
इसे पूरा होने में लगभग 165 सेकंड लेता है। अनुवादित क्वेरी कथन के प्रदर्शन को बेहतर बनाने के बारे में कोई विचार?
चूंकि प्रश्न छोड़ने के बिना तेज़ है, यह सुझाव देता है कि समस्या एंटिटी फ्रेमवर्क में प्रदर्शन विचार के अन्य क्षेत्रों की बजाय एसक्यूएल में है। इसलिए, पहली बात यह है कि मैं क्वेरी का धीमा होने का निदान करने के लिए एसक्यूएल प्रोफाइलर का उपयोग करना चाहता हूं। क्या आपने यह कोशिश की है? आपको क्या मिला? –
मैंने पहले ही ऐसा किया है। मुझे लगता है कि समस्या अनावश्यक सबक्वायरी में है जिसका निर्माण एंटिटी फ्रेमवर्क द्वारा किया जा रहा है, जब मैं एंटीटी फ्रेमवर्क के बजाय लिंकक्टोस्क्ल का उपयोग करके एक ही क्वेरी करता हूं तो परिणाम समान नहीं होता है और क्वेरी बहुत तेज (~ 30 सेकंड) होती है। यदि आप ऊपर दिए गए उदाहरण में एसक्यूएल देखते हैं, तो तालिका में एक अनावश्यक उप-क्वेरी है और पंक्ति_number तालिका पर लागू नहीं है, लेकिन उस उप-क्वेरी के परिणामों के लिए। – Boanerge
यह वास्तव में मेरे प्रश्न का उत्तर नहीं देता है। आपके द्वारा दोषित उप-समूह कई ईएफ प्रश्नों में प्रकट होता है जो पूर्ण होने के लिए 165 नहीं लेते हैं। एसक्यूएल प्रोफाइलर आपको अधिक विशिष्ट जानकारी देना चाहिए। क्या, ठीक है, 165s का कारण बन रहा है? –