Je l'instruction suivante:Pourquoi est-ce que je provoque une mise à jour de l'index cluster?
UPDATE TOP(1) dbo.userAccountInfo
SET Flags = Flags | @AddValue
WHERE ID = @ID;
La colonne « ID » est une clé primaire INT avec des contraintes IDENTITY. Les drapeaux sont un BIGINT NON NULL.
Le chemin d'exécution indique qu'une mise à jour d'index cluster est en cours. Une opération très coûteuse. Il n'y a pas d'index couvrant les drapeaux ou les ID, sauf pour la clé primaire. Je me sens comme le chemin d'exécution réelle devrait être:
Clustered Index Seek => Mise à jour
Vous êtes définitivement certain que l'index ne regroupe pas et ne couvre pas le champ [Drapeaux]? –
Qu'est-ce qui est avec le TOP (1) dans la requête? – BradC
@ Inconnu Google: J'ai seulement un idx non clusterisé sur cette table. Cela n'affecte ni les ID ni les drapeaux. @ BradC: C'est un peu de verbosité dans ma déclaration. "Cette déclaration affectera exactement un utilisateur." Mais ne sert vraiment à rien. – Kivin