Mon environnement :

J'ai une table T1 avec une série de champs, une clé primaire et une clé candidate filtrée.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
T1
-ID [PK]
-subID1
-subID2
-Col4
-Col5
 
UNIQUE (subID1, subID2) WHERE subID1 <> 0
Il existe (et persiste) une ligne dans T1 avecl'ID 0, cette ligne représente une "entrée non existante".


J'ai ensuite plusieurs tables T2, T3, T4 qui possèdent une référence vers la clé primaire (ID) de T1 avec une valeur par défaut de 0.
Cette référence est unique (sauf quand elle référence la ligne "0" de T1)

T2 (+/- comme T3, T4)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
T2
-ID [PK]
-T1ID DEFAULT 0
-Col3
-Col4
 
FOREIGNKEY (T1ID) REFERENCES T1 (ID) ON DELETE SET DEFAULT
 
 
NONCLUSETERED UNIQUE INDEX T1ID WHERE T1ID  <> 0
Donc chaque ligne de T1 peut être référencer par T2, T3, T4 au maximum une seule fois à l'exception de la "ligne 0".


À partir de là, j'ai de très mauvaise performances quand je supprime une ligne (ou ensemble de lignes) de T1.

Est-ce que ça vient de l'index filtré de T1 ?
Est-ce que ça vient des tables (T2, T3, T4) qui font références à T1?

Je ne comprends pas.