C'è qualche differenza, per quanto riguarda le prestazioni, quando ci sono molte query eseguite con (diversi) valori costanti all'interno di una clausola where, al contrario di avere una query con parametri dichiarati in cima, dove invece il valore del parametro sta cambiando?SQL: qualsiasi differenza di prestazioni utilizzando valori costanti rispetto ai parametri?
interrogazione campione con con valore costante nella clausola WHERE:
select
*
from [table]
where [guid_field] = '00000000-0000-0000-000000000000' --value changes
Proposto (migliore?) Query con parametri dichiarati:
declare @var uniqueidentifier = '00000000-0000-0000-000000000000' --value changes
select
*
from [table]
where [guid_field] = @var
C'è qualche differenza? Sto osservando i piani di esecuzione di qualcosa di simile alle due query precedenti e non vedo alcuna differenza. Tuttavia, mi sembra di ricordare che se si utilizzano valori costanti nelle istruzioni SQL, il server SQL non riutilizzerà gli stessi piani di esecuzione delle query o qualcosa del genere che produce prestazioni peggiori, ma è vero?
Le regole per la compilazione e stashing query per SQL Server sono piuttosto complesse. In generale, penso che compili la query basata sui primi parametri passati. Quindi, se il piano di query è memorizzato nella cache e si modificano i parametri, l'utilizzo successivo del piano potrebbe non essere ottimale per i nuovi valori. Tuttavia, dovrebbe andare bene per la prima chiamata, che genera il piano di query. Nota: iniziare con una tabella vuota e quindi compilare la tabella può anche influire sul piano migliore, anche con lo stesso valore passato. –