150
Chapitre 6. Utilisation des index
précédente, et de la page suivante, du niveau. Cela permet à SQL Server de parcourir (scan) le niveau dans l’ordre de la clé.
Scan avancé – édition Entreprise
L’édition Entreprise offre une optimisation avancée des scans (Advanced Scanning) : lorsque
plusieurs requêtes doivent parcourir simultanément la même table, l’édition Entreprise peut
partager ce parcours entre les processus. La fonctionnalité est appelée « parcours en
manège » (Merry-go-round scanning). Un processus se joint au parcours déjà initié, et lorsque
celui-ci est terminé, il le poursuit sur les pages qui n’ont pas été parcourues depuis son entrée
dans le circuit. Cela peut fortement diminuer le temps de réponse de requêtes qui doivent
effectuer des scan importants, en partageant le travail et en diminuant l’attente sur les
verrous.
Contrairement à d’autres SGBD, qui implémentent des index de type bitmap, ou
en hachage, il n’y a pour l’instant qu’une seule structure physique d’index en SQL
Server : le B-Tree (à part l’index de texte intégral, un peu à part). Même les index
XML, et les index spatiaux sur les données géographiques sont en interne des index
de structure B-Tree, sur une table interne pour le XML, et sur une décomposition
hiérarchique de l’espace pour les index spatiaux. L’index B-Tree peut être de deux
types : nonclustered et clustered (parfois appelés non ordonné, et ordonné).
6.1.1 Index clustered
Nous avons vu que le niveau feuille de l’index pointe sur un RID, et que l’opération
de RID lookup permet de retrouver les lignes de la table même. Cette structure, où
l’index est physiquement séparé de la table et où les clés sont liées aux lignes par un
pointeur, est un index nonclustered. Un autre type d’index B-Tree, nommé clustered,
réorganise physiquement les pages de données selon la clé de l’index. Commençons
par une démonstration.
USE tempdb
GO
CREATE TABLE dbo.indexdemo (
id int NOT NULL,
texte char(100) NOT NULL
DEFAULT (REPLICATE(CHAR(CEILING(RAND()*100)), 100))
);
GO
INSERT INTO dbo.indexdemo (id) VALUES (1)
INSERT INTO dbo.indexdemo (id) VALUES (2)
INSERT INTO dbo.indexdemo (id) VALUES (3)
INSERT INTO dbo.indexdemo (id) VALUES (4)
INSERT INTO dbo.indexdemo (id) VALUES (5)
INSERT INTO dbo.indexdemo (id) VALUES (6)
INSERT INTO dbo.indexdemo (id) VALUES (7)
INSERT INTO dbo.indexdemo (id) VALUES (8)
GO
Précédent

- 162/334

Suivant