Ich habe eine einfache SQL-Abfrage, die einen INNEREN JOIN zwischen Tabellen A und B mit Filterung macht. Tabelle A ist sehr groß, wohingegen Tabelle B ziemlich klein ist. Ich möchte nur Zeilen zurückgeben, die einem bestimmten Filter entsprechen, z. B. table_B.some_col IN ('a', 'b', 'c', 'd'). Natürlich habe ich diesen Filter als WHERE-Klausel. Allerdings wurde mir empfohlen, denselben Filter zu duplizieren, aber für Tabelle A und in den Join einzufügen. Zum BeispielSQL - innere Verbindung zwischen großer Tabelle und kleiner Tabelle, mit Filtern
SELECT
*
FROM table_A
INNER JOIN table_B
ON table_A.pk = table_B.pk
AND table_A.some_col IN ('a', 'b', 'c', 'd')
WHERE
table_B.some_col IN ('a', 'b', 'c', 'd')
Es wird behauptet, dass dies den Abfrageplan verbessert. Leider kann ich aufgrund von Sicherheitsbeschränkungen auf meinem Computer Abfragepläne nicht überprüfen. Ist diese Behauptung wahr?
festhalten , Ihre zwei Abfragen sind tatsächlich verschiedene Abfragen, ohne die Tabelle_A.some_col IN ... würden Sie eine beliebige aus B mit übereinstimmenden Primärschlüssel in A ausgewählt - es sei denn, some_col in B ist doppelte Wert in A – Cato