PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Jointure interne versus faire une clause where in

Y a-t-il une différence entre émettre une requête et émettre deux requêtes ? Eh bien, je l'espère bien. Le moteur SQL fonctionne, et il en fait deux fois plus (d'un certain point de vue) pour deux requêtes.

En général, l'analyse d'une seule requête sera plus rapide que l'analyse d'une requête, renvoyant un jeu de résultats intermédiaire, puis le renvoyant à une autre requête. Il y a une surcharge dans la compilation des requêtes et dans la transmission des données dans les deux sens.

Pour cette requête :

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

Vous voulez un index sur users(location) et location(id) .

Je veux souligner autre chose. Les requêtes ne sont pas équivalentes. La vraie requête de comparaison est :

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

Vous utilisez la même colonne pour le where et le on . Par conséquent, ce serait la version la plus efficace et vous voulez un index sur location(id) .