Forçage de parcours d’index

SQL Server 2008 a quelque peu facilité le contrôle des plans d’exécutions de requêtes grâce au « conseil » FORCESEEK. Ce mot clé permet d’indiquer au moteur que l’on souhaite utiliser pleinement la structure des index pour aller chercher les données, au lieu de parcourir l’ensemble de la table.

SQL Server 2012 apporte désormais le mot clé symétrique, FORCESCAN, qui permet d’indiquer au moteur qu’il n’est pas question d’aller chercher les éléments un par un, mais qu’il est, selon l’avis du développeur en tout cas, préférable de parcourir l’ensemble de la table.

Tout d’abord, revenons brièvement sur ce que sont un SEEK et un SCAN. Pour cela, au final, le plus simple est de s’appuyer sur les icônes représentant ces opérations dans un plan d’exécution.

Dans un premier temps, l’Index Scan () consiste à commencer à la première page de niveau feuille de l’index, et ensuite à parcourir l’ensemble des données, de page en page suivante, jusqu’au bout de l’ensemble de données.

L’Index Seek (), quant à lui, exploite pleinement l’arbre B de l’index et atteint directement le ou les enregistrements recherchés, à partir du prédicat de recherche qui correspond à la clé de l’index (ou au moins à son début).

Ce nouvel hint, FORCESCAN, peut donc forcer un plan d’exécution à utiliser un scan, là où le moteur choisirait éventuellement un Seek.

USE tempdb
SET NOCOUNT ON
CREATE TABLE TableTest (Id int PRIMARY KEY, Valeur varchar(Max))
GO
INSERT INTO TableTest (Id, Valeur) select isnull(Max(Id),0)+1,convert(varchar(max),isnull(Max(Id),0)+1) FROM TableTest
GO 100000

Bien sûr, sur cet exemple, je tairai le comparatif des performances dans ce cas d’école.

Mais dans des cas de statistiques ne reflétant pas certaines particularités de répartition des données, il est tout à fait possible que ce mot-clé puisse améliorer les performances d’une requête particulière…

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Contrôle de sécurité *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.