Bonjour à tous,
Je voudrais m'assurer de 2 optimisations : (mythe ou réalité ?)
1. Il faut éviter d’utiliser la fonction ISNULL sur les clauses ON et WHERE, en général cela se traduit par un table SCAN ou un INDEX SCAN
Typiquement il faut remplacer:
ON t.Code = t2.Code AND ISNULL(t2.Type,0) IN (4,8)
Par
ON t.Code = t2.Code AND (t2.Type IN(4,8) AND Type IS NOT NULL)
2. Il faut utiliser les partitions de tables. En s'appuyant sur le champs sur lequel on s'appuye pour faire les partitions.
Or si on met un ISNULL sur ce champ, on scan toutes les partitions, et on perd l'interet des partitions.
Typiquement il faut remplacer:
AND ISNULL(date1,getdate()) >= date2
Par
AND (date1 >= date2 OR date1 IS NULL)
Est ce que les recommandations 1. et 2. sont une bonne pratique et est ce une réelle optimisation ?
Car j'ai essayé d'évaluer le cout en IO (SET STATISTICS IO ON) sur une requete, et j'ai remarqué que cette "optimisation" faisait gonfler légerement les Nombre d'analyses et les lectures logiques !
Merci pour votre éclairage
Partager