Question

Quand j'insérer dans une table qui a une vue avec un index ordonné en clusters, le plan d'exécution estimé semble faire l'insert de table et index ordonné en clusters insérer des opérations en parallèle de la vue.

  1. Est-ce vrai?
  2. Pourquoi% s correspond pas à 100%?

Voici un peu d'un exemple artificiel.

/*
DROP INDEX [IX__AView] ON [dbo].[_AView]  
DROP VIEW _AView
DROP TABLE _A
*/

CREATE TABLE _A (Name VARCHAR(10) NOT NULL)
GO

CREATE VIEW _AView WITH SCHEMABINDING AS 
SELECT Name FROM [dbo]._A
GO

CREATE UNIQUE CLUSTERED INDEX [IX__AView] ON [dbo].[_AView] ([Name] ASC) 
GO

/*
--run the estimated execution on this
INSERT INTO _A (Name) values ('cheese')
*/

index-view-updates

Était-ce utile?

La solution

Il semble le faire dans l'ordre dans votre plan. Pas en parallèle. L'insert se produit dans le tas. Les lignes insérées sont insérées dans la bobine avide qui est un opérateur de blocage. Lorsque toutes les lignes sont insérées dans la table de base, les lignes sont insérées à partir de la bobine à la vue.

En ce qui concerne le problème pour cent, il semble que la bobine embrouille SSMS. En dépit montrant deux fois dans le plan (avec le même NodeId) son coût ne doit être compté qu'une seule fois, mais il semble que son coût est complètement ignoré lors du calcul du coût de sous-arbre global estimé pour le plan et il affiche les pourcentages de l'opérateur en proportion de ce total incorrect.

+---------------------+-----------+------------+--------------------------+
|                     |           | % of total | % of total without spool |
+---------------------+-----------+------------+--------------------------+
| Table Insert        | 0.0100022 | 39.84%     | 50.00%                   |
| Spool               | 0.0051012 | 20.32%     | 25.50%                   |
| CX Insert           | 0.010001  | 39.83%     | 49.99%                   |
| Sequence            | 0.000002  | 0.01%      | 0.01%                    |
| Total               | 0.0251064 |            |                          |
| Total without spool | 0.0200052 |            |                          |
+---------------------+-----------+------------+--------------------------+

plan Sentry SQL Explorateur gère correctement la question.

Plan

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top