On lit souvent qu’un index a des effets néfastes sur les performances des requêtes en Update. J’ai réalisé un micro-benchmark sur une de nos tables internes afin de déterminer cet impact de manière un peu plus précise.
La table utilisée est une table de production de 8 555 648 lignes, pesant 550 Mo et ayant 8 colonnes. Une de ces colonnes est un champ Email unique et une autre est la date d’intégration dans la base au format datetime.
La requête que j’utilise est :
Update R_Temp.dbo.Email
set Date_In='04/09/2008'
where Email in ('test@gmail.com')
and Date_In is null
Voici le plan d’exécution estimé sur la table sans index :
Comme il n’y a pas d’index, SQLServer doit procéder à un Table Scan, c’est-à-dire parcourir entièrement la table afin de trouver les lignes correspondant à la requête. Voici les coûts de ce Scan :
Estimated I/O Cost : 52,1454
Estimated CPU Cost : 4,70565
Estimated Operator Cost : 56,8511
Estimated Subtree Cost : 56,8511