Question

J'ai une question concernant jointure gauche sur SQL: Je voudrais savoir comment les serveurs SQL left join accomplir un

?

Disons que j'ai deux tables.

PEOPLE

  • id
  • nom

Téléphone

  • id
  • person_id
  • Téléphone

Quand j'Execute:

   select name, phone 
     from people 
left join phone on people.id = phone.person_id

... Je voudrais savoir comment traiter les serveurs SQL la chaîne de requête.

Je suppose:

  1. sélectionner toutes les lignes de personnes
  2. commencer correspondant à des lignes téléphoniques avec la condition. Dans ce cas, people.id = phone_person_id.
  3. Affichage de la valeur « téléphone » comme nulle si elle est introuvable car il reste rejoindre.

Ai-je raison ??

En outre, quels livres dois-je lire pour obtenir ce genre d'information?

Était-ce utile?

La solution

Qu'est-ce qui se passe (au moins dans postgresql, mais probablement d'autres sont semblables) est que le planificateur de requêtes prendra votre requête et générer de multiples stratégies d'exécution, il sera RANG stratégie en fonction de la connaissance qu'il a des tables (par statistiques), puis choisir la meilleure stratégie d'exécution et de l'exécuter.

Regardez ici pour plusieurs stratégies très communes: http://en.wikipedia.org / wiki / Join_% 28SQL% 29

En gros:

  • Nested Loop: Pour chaque peuple, faire une recherche indépendante dans le téléphone (comme beaucoup de petits SELECTs internes)
  • jointure de fusion: numérise les deux table // si elles ont l'indice permettant que
  • Hash Inscrivez-vous. Prenez d'abord la totalité du contenu de la table de téléphone et le charger dans une table de hachage, puis pour chaque peuple inspectent cette table et obtenir le téléphone correspondant de ce Hashtable temporaire

Autres conseils

Pour toutes les jointures, d'abord le processeur de requêtes regarde les deux ensembles qui sont jointes, et basé sur les données contenues dans ces tables (telles que représentées par statictics de base de données en mémoire cache), il combine les lignes dans les deux tables, en utilisant l'un des techniques de fusion disponibles ( merge Join , Hash Rejoignez ou boucles imbriquées ). Une fois terminé l'ensemble combiné comporte une rangée en elle pour chaque combinaison d'une rangée d'un côté d'une rangée fropm l'autre côté, qui satisfait à la condition de jointure.

Alors, si elle est une jointure externe, toutes les lignes du côté « intérieur » de la jointure qui ne remplissait pas la condition de jointure (il n'y avait pas de dossier correspondant sur le côté « extérieur ») sont rajoutés dans l'ensemble combiné , avec des valeurs nulles pour toutes les colonnes qui sont venus du côté extérieur ..

Exécuter votre requête dans SQL Server Management Studio et dans le menu Requête, choisissez l'option pour obtenir le plan d'exécution réel.

Après votre exécution de votre requête, le plan d'exécution reviendra sous forme de diagramme sur un onglet séparé. Il se lit de gauche à droite. Ce plan va vous montrer ce qui se passe sous le capot.

En savoir plus ici

http://msdn.microsoft.com /en-us/library/aa178423%28SQL.80%29.aspx

http://www.simple-talk.com/ sql / performance / exécution de base-plan /

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