Answer-ID
  • Întrebări
  • Tag-uri
  • Categorii
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 cllpse
cllpse

Linq to SQL: selectați optimizarea

Pe mese mari în MSSQL; selectarea unor coloane specifice duce la o viteză mai mare a interogării. Același lucru se aplică Linq la SQL?

Ar fi aceasta:

var person = from p in [DataContextObject].Persons
             where p.PersonsID == 1
             select new { p.PersonsID, p.PersonsAdress, p.PersonsZipcode };

fi mai rapid decât aceasta:

var person = from p in [DataContextObject].Persons
             where p.PersonsID == 1
             select p;

...?

6 2008-10-14T15:38:18+00:00 6
Programare
linq-to-sql
sql
performance
Comentarii la întrebare (0)
Peter
14 octombrie 2008 в 7:43
2008-10-14T19:43:00+00:00
Mai mult
Sursă
Editează
#201702

Vă recomandăm foarte mult LinqPad . Este gratuit și vă permite să rulați în mod dinamic interogările LINQ. Când se poate consulta, de asemenea, SQL-ul care este generat.

Ceea ce veți vedea este că interogarea LINQ va traduce prima interogare în selectarea acelor coloane. Deci este mai rapid.

6
0
Comentarii (0)
Mitchel Sellers
14 octombrie 2008 в 7:40
2008-10-14T19:40:03+00:00
Mai mult
Sursă
Editează
#201691

Dacă limitați mărimea rezultatului setat selectând doar câteva coloane specifice, atunci YES va avea un efect.

EDIT ading clarification from comment

Cum este mai bine acest lucru, va reduce dimensiunea datelor rezultate din SQL și va reduce dimensiunea obiectelor utilizate pentru stocarea rezultatelor în memorie.

Acest lucru se datorează faptului că în cele din urmă LINQ to SQL generează SQL, astfel încât aceleași avantaje de performanță există.

4
0
Comentarii (0)
liggett78
14 octombrie 2008 в 8:03
2008-10-14T20:03:45+00:00
Mai mult
Sursă
Editează
#201797

Există 3 aspecte cu "mai rapid" aici.

  1. înseamnă mai puține date transmise mai repede. Pe de altă parte, o va face nu obțineți mai rapid semnificativ cu excepția cazului în care selectați mai mult de un rând sau dacă persoana dvs. conține ceva alte coloane "grele" - lungi varchare, imagine etc.
  2. , a subliniat J. Curran, mai puțin memoria alocată înseamnă mai repede. Aceeași observație ca în 1. se aplică aici.

  3. Interogarea dvs. se execută mai repede dacă sunteți au un indice care conține toate coloanele selectate (sau atașate la acestea începând de la SQL Server 2005). În acest caz, motorul SQL Server nu trebuie să încarce pagina cu rândul în memorie - dacă nu este încă acolo.

Personal nu mi-ar deranja să-mi optimizez interogările în acest fel (dacă, așa cum am spus, rândurile tale conțin date binare sau șiruri foarte lungi pe care nu ai nevoie), parțial pentru că dacă vei decide mai târziu că vrei să ai mai mult informații despre această persoană selectată, va trebui să schimbați codul de acces DB față de accesarea unei proprietăți din clasa POCO/anonim.

3
0
Comentarii (0)
CMS
14 octombrie 2008 в 7:41
2008-10-14T19:41:33+00:00
Mai mult
Sursă
Editează
#201695

Cred că același lucru se aplică, deoarece LINQ to SQL traduce operațiile de interogare Linq la comenzile SQL.

1
0
Comentarii (0)
James Curran
14 octombrie 2008 в 7:44
2008-10-14T19:44:45+00:00
Mai mult
Sursă
Editează
#201708

În plus față de ceea ce au spus ceilalți, noua structură anonimă va fi un obiect cu o greutate mult mai ușoară decât obiectul Persoană - ar fi mult mai rapid chiar dacă ați selectat toate coloanele. (Persoana are metodă/câmpuri etc. pentru a sprijini scrierea obiectului înapoi în baza de date.

1
0
Comentarii (0)
DamienG
16 octombrie 2008 в 12:42
2008-10-16T00:42:04+00:00
Mai mult
Sursă
Editează
#206377

Dacă aveți coloane care sunt foarte mari, cum ar fi binarele și imaginile, atunci poate face o diferență semnificativă și de aceea LINQ to SQL vă permite să specificați încărcarea întârziată pentru anumite coloane astfel încât să puteți selecta încă obiecte întregi fără a efectua proiecții "selectați noi" .

1
0
Comentarii (0)
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
© Answer-ID 2021
Sursă
https://stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire