PDA

View Full Version : جستجو با حجم اطلاعاتی بالا



jaykob
چهارشنبه 22 تیر 1390, 17:54 عصر
سلام دوستان

من یک دیتابیس دارم که حجم خیلی بالایی دارد ( حدود 20 میلیون رکورد ) می خوام یک جستجو داشته باشم با استفاده از LINQ یک جستجو ایجاد کردم که خوب معمولی یک Select می کنه و cast می کنم و در grid view نشون می دم . اما خیلی طول می کشه ( حدود 10 دقیقه ) می خوام از دوستان نظراتشون رو بپرسم که این جستجو رو چجوری بهینه کنم که سریعتر بشه .

با تشکر

Himalaya
چهارشنبه 22 تیر 1390, 20:25 عصر
سلام
احتمالا نوع بازگشتی شما به صورت <IEnumerable<T هستش.
این 2 تا مثالو ببین

IEnumerable<Category> categories1 = db.Categories;
IEnumerable<Category> filterCategory1 = categories1.Select(c => c).Take(10);

IQueryable<Category> categories2 = db.Categories;
IQueryable<Category> filterCategory2 = categories2.Select(c => c).Take(10);
کوئریهایی که این 2 تیکه کد برای اجرا رو sql server ایجاد میکنن به ترتیب به صورت زیر هستن (واسه مشاهده دستورات sql از sql server profiler که همراه خود sql نصب میشه استفاده کنید)

SELECT [t0].[CategoryID], [t0].[ParentID], [t0].[Title], [t0].[Photo], [t0].[Active]
FROM [dbo].[Category] AS [t0]
و

SELECT TOP (10) [t0].[CategoryID], [t0].[ParentID], [t0].[Title], [t0].[Photo], [t0].[Active]
FROM [dbo].[Category] AS [t0]
که خوب تو اولی (IEnumerable) همه رکوردها دارن برگشت داده میشن و بعد عمل فیلترینگ رو اون انجام میشه
ولی تو دومی (IQueryable) فقط 10 رکورد یک ضرب از دیتابیس خونده میشه و فیلتر شدن هم تو همون sql انجام میشه.
وحید نصیری تو مقایسه IEnumerable و IQueryable در مورد IQueryable میگه

به آن بايد به شكل يك expression builder نگاه كرد و نه ليستي از اشياء فيلتر شده‌ي مامطلب کاملش رو هم میتونید تو اینجا (http://www.dotnettips.info/2010/10/iqueryable-ienumerable-orms.html)بخونید