PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Inner Join im Vergleich zum Ausführen einer Where-in-Klausel

Gibt es einen Unterschied zwischen dem Ausgeben einer Abfrage und dem Ausgeben von zwei Abfragen? Nun, das hoffe ich natürlich. Die SQL-Engine leistet Arbeit, und sie leistet doppelt so viel Arbeit (aus einer bestimmten Perspektive) für zwei Abfragen.

Im Allgemeinen ist das Analysieren einer einzelnen Abfrage schneller als das Analysieren einer Abfrage, das Zurückgeben einer Zwischenergebnismenge und das anschließende Zurückführen in eine andere Abfrage. Bei der Abfragekompilierung und beim Hin- und Herleiten von Daten entsteht Overhead.

Für diese Abfrage:

select * 
from users u inner join
     location l
     on u.location = l.id 
where u.location = 10; 

Sie möchten einen Index für users(location) und location(id) .

Ich möchte noch auf etwas anderes hinweisen. Die Abfragen sind nicht gleichwertig. Die eigentliche Vergleichsabfrage lautet:

select l.*
from location l
where l.id = 10;

Sie verwenden dieselbe Spalte für where und das on . Daher wäre dies die effizienteste Version und Sie möchten einen Index für location(id) .