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
- hardware specifico
- distribuzione specifica dei dati temporali
- 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.