299
9.2 Maîtrise de la compilation
les recompilations s’effectuent maintenant instruction par instruction, beaucoup de
recompilations dues aux tables temporaires ne se produisent plus, car le plan de toute
la procédure n’est pas invalidé et le cache de chaque instruction peut être réutilisé.
Lorsque la table temporaire est créée, une recompilation de type « compilation
déférée » (voir plus loin les événements de trace) est déclenchée. Ensuite, l’insertion, la mise à jour ou la suppression de lignes dans la table temporaire peut rapidement provoquer d’autres recompilations, pour prendre en compte les nouvelles
cardinalités (la distribution des valeurs dans une colonne). Une recompilation est
générée sur une table temporaire à partir de six insertions sur une table vide. Par
exemple :
ALTER PROC dbo.testtemptable
@nbInserts smallint = 1
AS BEGIN
DECLARE @i smallint
SET @i = 1
CREATE TABLE #t (
id int identity(1,1) PRIMARY KEY NONCLUSTERED,
col char(8000) NOT NULL DEFAULT ('e'))
WHILE @i <= @nbInserts BEGIN
INSERT INTO #t DEFAULT VALUES
SELECT * FROM #t WHERE col = 'e' OR id > 20
SET @i = @i + 1
END
END
GO
EXEC dbo.testtemptable
GO
Si vous tracez cette exécution avec le profiler, vous verrez un résultat ressemblant
à la figure 9.2.
Figure 9.2 — Recompilations sur tables temporaires
Précédent

- 311/334

Suivant