2011-09-23 15 views
9

Mam jedną tabelę (Mój Sql) z 2 milionami rekordów i jedną listą z 100 rekordami. Mam listę Z wyjątkiem wyrażenia lamda do wyszukiwania wszystkich adresów URL znajdujących się na liście, ale nie w tabeli.List and Linq To Sql Performance Issue

Problem polega na tym, że zajmuje to dużo czasu około 5 minut. Pracuję w potężnym VPS oraz kodzie i bazie danych na tym samym serwerze.

Proszę zasugerować mi Wszystkie możliwe sposoby zwiększenia wydajności linq do sql i linq do encji.

mojego kodu Is`return

Urls.Except(DbContext.postedurllists.Select(crawl => crawl.PostedUrl).ToList()).ToList();` 

Gdzie Urls Czy Lista zawierających 100 adresów URL i postedurllists jest tabela, która zawiera zapis 2 miliony. Dzięki

+1

20L? Czy masz na myśli 20 "lakh", czyli 2 miliony? (Warto wiedzieć, że "lakh" nie jest powszechnie używany poza Indiami i krajami w tym regionie.) Proszę pokazać swój kod - bardzo trudno jest pomóc zdiagnozować problemy po prostu od * opisu * kodu, zamiast samego kodu. –

+0

@Jon Dzięki za sugestię. –

Odpowiedz

3

Aktualnie pobierasz wszystkie z adresów URL z bazy danych. To nie jest dobry pomysł. Zamiast tego proponuję ciągnięcie skrzyżowanie z bazy danych skutecznie przekazując swoją listę Urls do baza danych, a robi except na podstawie wyników:

var commonUrls = DbContext.postedurllists 
          .Select(c => c.PostedUrl) 
          .Where(url => Urls.Contains(url)) 
          .ToList(); 

var separateUrls = Urls.Except(commonUrls); 
+0

Bardzo dziękuję za odpowiedź –

+0

Działa świetnie, thnx –