Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

L'utilizzo di variabili nella query genera un diverso piano di query

Perché quando si utilizzano valori FISSI con AUTO-PARAMETERIZATION disattivata, il piano di query sa ESATTAMENTE per quale valore è necessario eseguire la query. Quindi il piano è sintonizzato SPECIFICAMENTE su quei valori.

Tuttavia, quando si utilizzano variabili, il piano che verrà inserito nella Query Cache è quello contenente le variabili parametrizzate, che possono essere sostituite da qualsiasi variabile e riutilizzano lo stesso piano. Pertanto, questi piani dovranno essere più solidi e generici per gestire il "miglior caso medio".

In SQL Server 2008, puoi impostare se i parametri semplici vengono parametrizzati automaticamente in modo da ottenere costantemente il piano "caso medio migliore", con tutti i suoi aspetti positivi e negativi.

Rif:

MODIFICA - sulle prestazioni

Per quanto riguarda le prestazioni, l'ottimizzatore può sbagliare:in questo caso ha esaminato le statistiche for the exact values e ha ritenuto che l'indice non sia utile (potrebbe essere un problema di non ritorno), quindi il piano è invece per la scansione in cluster. È un'arte decidere se forzare un piano di query, ma chiaramente l'utilizzo di un indice è il 50% più veloce per

  1. hardware specifico
  2. distribuzione specifica dei dati temporali
  3. valori specifici forniti

A meno che non avessi una buona ragione, non giocherei con Query Optimizer (ad es. usando i suggerimenti per l'indice) a meno che non disponga di molti dati per dimostrare che invariabilmente lo renderà più veloce.