چهار شنبه 10 آبان 1396 - 10:24
WHERE IN را در SQL نادیده نگیرید(مشکلات NET. :بخش بیست و سوم)
با استفاده از WHERE IN در دات نت و در sql داده ها را به صورت دسته ای ارسال کنید.
Entity Framework به اندازه کافی هوشمند است تا با استفاده از Contains()بتواند کوئری های LINQ را به WHERE IN در SQL تبدیل کند. اما یک مشکل پنهان وجود دارد: دادن یک مجموعه داده ای به طول بیش از 10،000 رکورد در WHERE IN به طور قابل توجهی عملکرد تولید پرس و جو و اجرای پرس و جو را کاهش می دهد.
var ids = new int[]{0,1, 2,3,4,5,6,7,8,9,10........99995, 99996,99997,99998,99999}; var matches = (from person in people where ids.Contains(person.Id) select person).ToArray();
کد بالا یک کوئری SQL را نشان می دهد.
SELECT * FROM PERSON WHERE ID IN (0,1,2,3,4,5,6,7,8,9,10.....,99995,99996,99997,99998,999 99
بنابراین توصیه می شود که داده ها را به صورت دسته ای ارسال کنید. برای مثال، 500 رکورد در هر دسته، عملکرد قابل توجهی را در بهبود عملکرد نشان می دهد، اما شما باید معیار سنجش را انجام دهید تا ببینید چه چیزی برای شما کار می کند.