Bonjour,

Soit la table d_client de 5 millions de lignes.

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]
Soit les DBCC USEROPTIONS suivants

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 :

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
--> 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  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 case when customer_line  is null then 1 else 0 end=1
--> 1.200.000 lignes (VRAI)

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 ?