Je sais quand il s'agit d'utiliser un index ou une analyse de table, SQL Server utilise des statistiques pour voir laquelle est la meilleure.
J'ai une table avec 20 millions de lignes. J'ai un index sur (SnapshotKey, Measure) et cette requête:
select Measure, SnapshotKey, MeasureBand
from t1
where Measure = 'FinanceFICOScore'
group by Measure, SnapshotKey, MeasureBand
La requête renvoie 500 000 lignes. Ainsi, la requête ne sélectionne que 2,5% des lignes de la table.
La question est pourquoi SQL Server n'utilise pas l'index non cluster que j'ai et utilise à la place une analyse de table?
Les statistiques sont mises à jour.
Bon de mentionner que les performances de la requête sont bonnes cependant.
Scan de table
Index forcé
Structure de table / index
CREATE TABLE [t1](
[SnapshotKey] [int] NOT NULL,
[SnapshotDt] [date] NOT NULL,
[Measure] [nvarchar](30) NOT NULL,
[MeasureBand] [nvarchar](30) NOT NULL,
-- and many more fields
) ON [PRIMARY]
Pas de PK sur table, car c'est un entrepôt de données.
CREATE NONCLUSTERED INDEX [nci_SnapshotKeyMeasure] ON [t1]
(
[SnapshotKey] ASC,
[Measure] ASC
)