2010-02-06 11 views
6

Le query generate da linq vengono memorizzate nella cache in modo efficace da SQL Server 2008?Le query generate da linq vengono memorizzate nella cache in modo efficace da SQL Server 2008?

oppure è meglio utilizzare le stored procedure con linq o cosa dire di una visualizzazione e quindi utilizzare le query in linq compilate ... opinioni?

applausi

enfasi è su "efficace", e o è meglio ....

es. le viste sono memorizzate nella cache bene da sql server e quindi utilizzando linq sulla vista ....

+0

intendevo anche qui linq che si collega alla stored procedure ... ma se è meglio senza linq è anche interessante .... domanda aperta ... :-) – alex

risposta

2

Oltre alle risposte già fornite in base a Damien Guard, c'è un problema nei provider LINQ to SQL ed EF LINQ che non riesce a impostare le lunghezze variabili in modo coerente per le query che coinvolgono parametri stringa.

http://damieng.com/blog/2009/12/13/sql-server-query-plan-cache

A quanto pare è stato risolto nel .NET 4.0.

In passato ho scritto stored proc al posto delle query LINQ, principalmente per complesse query di tipo reportistica piuttosto che CRUD semplice, ma solo seguendo la profilazione della mia applicazione.

+0

eeek questo è brutto ... non lo sapeva di linq quindi per quanto riguarda le viste ... – alex

+0

Le viste sarebbero trattate esattamente nello stesso modo di tabelle. –

1

L2S passa semplicemente le query a SQL Server 2008. Quindi verranno memorizzate nella cache o non memorizzate nella cache, come qualsiasi altra query inviata da qualsiasi altro processo. Il fatto che una query Linq sia compilata non ha alcun impatto su come SQL Server elabora la query.

+0

mi rendo conto che la query compilata non ha alcun impatto su il server sql ma sul processo completo, es. l'albero delle espressioni parsing ecc. Quindi se questo è compilato e quindi usando una vista memorizzata nella cache/processo memorizzato ... – alex

+0

@alex - Non fa alcuna differenza ciò che L2S fa per prepararsi a inviare la query, sia che si tratti di una query compilata , l'analisi delle espressioni tree ecc. ha un impatto zero su come SQL Server elabora la query. Molti fattori determinano se SQL Server riutilizzerà una query memorizzata nella cache, ma L2S non ha nulla a che fare con questo. –

1

query che LINQ genera sono normali query SQL come la vostra query SQL fatti a mano, e seguono le stesse regole: se il testo della query è identico (fino all'ultima virgola e spazi bianchi) di un testo di query prima è probabile che il suo piano di esecuzione delle query sia stato memorizzato nella cache e possa quindi essere riutilizzato.

Il punto è: il testo della query deve essere assolutamente identici - se anche un solo spazio bianco è diverso, SQL Server considera una nuova query e quindi passerà attraverso il pieno processo di analisi, analizzare, trovare una query pianificare ed eseguirlo

Ma in sostanza, sì, le query inviate da LINQ verranno memorizzate nella cache e riutilizzate - se soddisfano tali criteri!

+0

ho pensato che ms sql 2008 può decidere di utilizzare la parametrizzazione semplice ... sql 2008 interni p 533 ... e anche la posibilità della parametrizzazione forzata – alex

+0

sì, se si dispone di una query parametrizzata, si ha il testo della query identica per un numero di richieste ripetute - e quindi il piano di query sarà molto probabilmente memorizzato nella cache e riutilizzato –

Problemi correlati