Bonjour,
Soit la table d_client de 5 millions de lignes.
Soit les DBCC USEROPTIONS suivants
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 CREATE TABLE [d_client] ( [customer_id] [int] IDENTITY (1, 1) NOT NULL , [customer_key] [varchar] (15) COLLATE French_CI_AS NULL , [customer_line] [varchar] (40) COLLATE French_CI_AS NULL CONSTRAINT [PK_d_client] PRIMARY KEY CLUSTERED ( [customer_id] ) ON [PRIMARY] ) ON [PRIMARY]
textsize 64512
language Français
dateformat dmy
datefirst 1
quoted_identifier SET
arithabort SET
ansi_null_dflt_on SET
ansi_defaults SET
ansi_warnings SET
ansi_padding SET
ansi_nulls SET
concat_null_yields_null SET
Soit les résultats de requetes suivantes :
--> 1.200.000 lignes (VRAI)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select count(*) from d_client where customer_line is null
--> 1.200.000 lignes (VRAI)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select customer_line from d_client where customer_line is null
--> 4.800.000 lignes (FAUX !!!)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select customer_key, customer_line from d_client where customer_line is null
--> 1.200.000 lignes (VRAI)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 select customer_key, customer_line from d_client where case when customer_line is null then 1 else 0 end=1
Interessons nous maintenant uniquement à la requête qui retourne un mauvais résultat.
Les champs customer_key et customer_line sont indexés.
Si je drop l'index sur customer_key et relance la requete qui renvoyait 4.800.000 lignes, le résultat devient bon (1.200.000 lignes).
Si je le recrée, le résultat redevient FAUX.
Si je drop l'index sur customer_line et relance la requete qui renvoyait 4.800.000 lignes, le résultat devient bon (1.200.000 lignes).
Si je le recrée, le résultat redevient FAUX.
Quelqu'un a une idée ?
Partager