मेरे पास 200,000 रिकॉर्ड की एक तालिका है जहां मुझे केवल .Take()
का उपयोग करके शीर्ष 10 मिल रहा है लेकिन डेटा प्राप्त करने में लगभग 10 सेकंड लग रहे हैं।लिंक से इकाइयों का उपयोग बहुत धीमा है। टेक() विधि
मेरा प्रश्न है: क्या .Take()
विधि डेटाबेस से सभी डेटा प्राप्त करता है और क्लाइंट पक्ष पर शीर्ष 10 फ़िल्टर करता है?
mylist = (from mytable in db.spdata().OrderByDescending(f => f.Weight)
group feed by mytable.id into g
select g.FirstOrDefault()).Take(10).ToList();
spdata()
संग्रहीत प्रक्रिया से एक समारोह के आयात है:
यहाँ मेरी कोड है।
धन्यवाद
आप उत्सुक क्या यह डेटाबेस के खिलाफ चलाता है आप एक प्रोफाइलर हुक चाहिए रहे हैं अपने डीबी तक और लॉग की जांच करें, यह पता लगाने का सबसे अच्छा तरीका है। – Chris
यदि spdata() 200,000 लौटाता है तो हाँ, यह क्लाइंट पक्ष पर करेगा। –
क्रिस 'विधि के अलावा, आप लिंककैड को भी आजमा सकते हैं और उत्पन्न क्वेरी को देखने के लिए अपनी क्वेरी लिखने के बाद एसक्यूएल व्यू पर स्विच कर सकते हैं, या ब्रेकपॉइंट डाल सकते हैं (इस विधि के साथ http://stackoverflow.com/questions/1412863/how कार्यक्रम-निष्पादन के रूप में जेनरेट किया गया है यह देखने के लिए -do-i-view-the-sql-gener-by-the-entity-framework)। –