Bonjour à tous,
j'espère que je suis dans la bonne catégorie pour ce sujet.
Je constate un problème assez déroutant sur une requête toute simple :
retourne "56221"
Code : Sélectionner tout - Visualiser dans une fenêtre à part select count(1) from myTable where someField = 46
mais un :
retourne 3997 lignes
Code : Sélectionner tout - Visualiser dans une fenêtre à part select * from myTable where someField = 46
voilà le plan d'exécution :
Je ne vois pas comment un simple count() peut renvoyer un résultat erroné.
J'ai testé de faire un rebuild et un reorganize de l'index, pas mieux.
La seule façon d'avoir le bon 'count' est de forcer l'utilisation d'un autre index (via un hint)
retourne "3997"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select count(1) from myTable with(index= anotherIndex) where someField = 46
A toute fin utile, voilà le script de création de l'index
Je suis en version Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE NONCLUSTERED INDEX [IX_myTable] ON [myTable] ( [SomeField] ASC, [AnotherField] ASC ) INCLUDE ( [Field1], [Field2], [Field3], [Field4]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 70) GO
Quelqu'un a déjà eu ce genre de problèmes ?
Merci !
PS : le champ "SomeField" est en int nullable mais ne contient aucune valeur NULL dans la table.
Partager