Welche Schritte verfolgt sql engine, um die Abfrage auszuführen?

9

Meine Frage ist nicht, wie man inner join in sql verwendet. Ich weiß, wie es zwischen Tabelle a und Tabelle b übereinstimmt.

Ich möchte fragen, wie ist das interne Arbeiten des inneren Arbeitens. Um welchen Algorithmus handelt es sich? Was passiert intern beim Verbinden mehrerer Tabellen?

    
henry 08.05.2009, 07:27
quelle

7 Antworten

2

Je nach DB Server, Indizes und Datenreihenfolge (Clustered PK) gibt es unterschiedliche Algorithmen, ob berechnete Werte verknüpft sind oder nicht etc.

Sehen Sie sich einen Abfrageplan an, den die meisten SQL-Systeme für eine Abfrage erstellen können. Er sollte Ihnen eine Vorstellung davon geben, was er tut.

    
Lucero 08.05.2009 07:38
quelle
2

In MS Sql werden verschiedene Join-Algorithmen in verschiedenen Situationen verwendet, abhängig von den Tabellen (ihre Größe, welche Art von Indizes verfügbar sind usw.). Ich kann mir vorstellen, dass andere DB-Engines auch eine Vielzahl von Algorithmen verwenden.

Die wichtigsten Arten von Joins, die von Frau Sql verwendet werden, sind:
- Verschachtelte Schleifen verbindet
- Joins verbinden
- Hash verbindet

Sie können mehr über sie auf dieser Seite lesen: Msdn - Erweiterte Konzepte zur Abfrageoptimierung

Wenn Sie SQL erhalten, um den 'Ausführungsplan' für Ihre Abfragen anzuzeigen, können Sie sehen, welcher Join-Typ in verschiedenen Situationen verwendet wird.

    
codeulike 08.05.2009 07:39
quelle
2

Es hängt davon ab, welche Datenbank Sie verwenden, welcher Gruppe Sie beitreten (groß / klein, in Sequenz / zufällig, indexiert / nicht-indiziert usw.).

Zum Beispiel hat SQL Server mehrere verschiedene Join-Algorithmen; Loop-Joins, Merge-Joins, Hash-Joins. Welche verwendet wird, wird vom Optimierer bestimmt, wenn ein Ausführungsplan ausgearbeitet wird. Manchmal macht es eine Fehleinschätzung und Sie können dann einen bestimmten Join-Algorithmus mit Join-Hinweisen erzwingen.

Sie können die folgenden MSDN-Seiten interessant finden:
Ссылка (loop) < br> Ссылка (Hash)
Ссылка (Zusammenführen)
Ссылка (Hinweise)

    
KristoferA 08.05.2009 07:40
quelle
0

In diesem Fall sollten Sie sehen, wie Daten in b-tree gespeichert werden, nachdem ich denke, dass Sie den JOIN-Algorithmus verstehen werden.

    
Galkin 08.05.2009 07:35
quelle
0

All based set theory, schon seit einiger Zeit. Versuchen Sie, nicht zu viele Tabellen zu einer Zeit zu verknüpfen, scheint Datenbankressourcen mit dem ganzen Scannen zu verkrusten. Indizes helfen bei der Leistung, sehen Sie sich einige SQL-Sites an und suchen Sie nach Optimierung von SQL-Abfragen, um einen Einblick zu erhalten. SQL Management Studio verfügt über ein eingebautes Ausführungsplan-Dienstprogramm, das insbesondere für große komplexe Abfragen oft interessant ist.

    
08.05.2009 07:42
quelle
0

Der Optimierer wählt (oder sollte) den schnellsten Join Algo.

Es gibt jedoch zwei verschiedene Arten zu bestimmen, was schnell ist:

  1. Sie messen die Zeit, die benötigt wird, um alle verknüpften Zeilen zurückzugeben.
  2. Sie messen die Zeit, die benötigt wird, um die ersten verbundenen Zeilen zurückzugeben.

Wenn Sie alle Zeilen so schnell wie möglich zurückgeben möchten, wählt der Optimierer häufig einen Hash-Join oder einen Merge-Join. Wenn Sie die ersten paar Zeilen so schnell wie möglich zurückgeben wollen, wählt der Optimierer einen Nested Loops Join.

    
tuinstoel 08.05.2009 07:51
quelle
-2

Erzeugt ein kartesisches Produkt der beiden Tabellen und wählt dann die Zeilen daraus aus. Lesen Sie Korth Buch über Datenbanken für die gleichen.

    
Geek 08.05.2009 07:39
quelle

Tags und Links