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 ...

  1. 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?
  2. Quand les JOIN conseils utilisés? Lorsque le sh * t frappe les busters ventilateur et fantôme est pas en ville?
  3. 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.

Était-ce utile?

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.

  1. 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 la JOIN et les conditions de WHERE.

  2. 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 les FULL JOINs 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é)

  3. HASH construire une table de hachage dans la mémoire temporaire (mémoire ou tempdb) à 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 de WHERE et JOIN.

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top