SQL Server 2008 REJOIGNEZ-conseils
-
20-09-2019 - |
Question
Récemment, je tentais d'optimiser cette requête
UPDATE Analytics
SET UserID = x.UserID
FROM Analytics z
INNER JOIN UserDetail x ON x.UserGUID = z.UserGUID
plan d'exécution estimé montrent 57% sur la table mise à jour et 40% sur un Hash Match (Aggregate). Je l'ai fait un peu fureter et suis tombé sur le thème de REJOIGNEZ conseils. Donc, j'ai ajouté un soupçon de boucle à mon intérieur et rejoindre WA-ZHAM! Le nouveau plan d'exécution montre 38% sur la mise à jour du tableau et 58% par rapport à un indice de recherche.
Je suis sur le point de commencer à appliquer LOOP astuces pour toutes mes requêtes jusqu'à ce que la prudence a obtenu le meilleur de moi. Après quelques googler, je me suis aperçu que REJOIGNEZ-conseils ne sont pas très bien couvert BOL . Par conséquent ...
- Quelqu'un peut-il s'il vous plaît me dire pourquoi appliquer LOOP suggestions à toutes mes questions est une mauvaise idée. J'ai lu quelque part qu'une boucle JOIN méthode par défaut INSCRIPTION Optimiseur de requête mais n'a pas pu vérifier la validité de la déclaration?
- Quand les JOIN conseils utilisés? Lorsque le sh * t frappe les busters ventilateur et fantôme est pas en ville?
- Quelle est la différence entre LOOP, HASH et Merge conseils? BOL déclare que MERGE semble être le plus lent, mais quelle est l'application de chaque indice?
Merci pour votre temps et aider les gens!
Je suis en cours d'exécution SQL Server 2008 BTW. Les statistiques mentionnées ci-dessus sont ESTIME plans d'exécution.
La solution
Quelqu'un peut-il s'il vous plaît me dire pourquoi appliquer LOOP suggestions à toutes mes questions est une mauvaise idée. J'ai lu quelque part qu'une boucle JOIN est par défaut méthode join pour Optimiseur de requête mais n'a pas pu vérifier la validité de la déclaration?
Parce que cela prive l'optimiseur de la possibilité d'envisager d'autres méthodes qui peuvent être plus efficaces.
Quand est-ce JOIN conseils utilisés? Lorsque le sh * t frappe les busters ventilateur et fantôme est pas en ville?
Lorsque la distribution des données (sur laquelle l'optimiseur prend ses décisions) est sévèrement biaisée et les statistiques ne sont en mesure de représenter correctement.
Quelle est la différence entre LOOP, HASH et Merge conseils? BOL déclare que MERGE semble être le plus lent, mais quelle est l'application de chaque indice?
Ce sont différents algorithmes.
-
LOOP
boucles imbriquées est: pour chaque enregistrement de la table externe, la table interne est recherchée pour les matchs (en utilisant l'indice de disponible). Plus rapide lorsque seule une infime partie des enregistrements des deux tables satisfont laJOIN
et les conditions deWHERE
. -
sortes de
MERGE
les deux tables sont les déplace dans l'ordre de tri, en sautant les enregistrements sans correspondance. La plus rapide pour lesFULL JOIN
s et quand les deux sont déjà classés recordsets (des opérations de tri précédent ou lorsque le chemin d'accès à l'index est utilisé) -
HASH
construire une table de hachage dans la mémoire temporaire (mémoire outempdb
) à partir de l'une des tables et il recherche pour chaque enregistrement à partir de l'autre. Plus rapide si la grande partie des enregistrements de deux tables correspond à la condition deWHERE
etJOIN
.
Autres conseils
Le plan d'exécution estimé à 57% montrent sur la mise à jour du tableau et 40% sur un Hash Match (Aggregate). Je l'ai fait un peu fouiner autour et suis tombé sur le thème de la REJOIGNEZ-conseils. Donc, j'ai ajouté un soupçon de LOOP ma jointure interne et WA-ZHAM! Le nouveau plan d'exécution représente 38% de la Table Mise à jour et 58% sur un indice de recherche.
Certes, cela signifie que votre plan proposé est pire? En supposant que la mise à jour de la table prend une constante de temps, il est maintenant hors de l'activité chiffré de l'indice.