sql >> Database >  >> RDS >> PostgreSQL

Innerlijke join versus het doen van een where in-clausule

Is er een verschil tussen het afgeven van één zoekopdracht en het afgeven van twee zoekopdrachten? Nou, dat hoop ik zeker. De SQL-engine doet werk en doet twee keer zoveel werk (vanuit een bepaald perspectief) voor twee queries.

Over het algemeen gaat het ontleden van een enkele query sneller dan het ontleden van één query, het retourneren van een tussenliggende resultatenset en het terugkoppelen ervan naar een andere query. Er is overhead bij het samenstellen van query's en bij het heen en weer doorgeven van gegevens.

Voor deze vraag:

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

U wilt een index op users(location) en location(id) .

Ik wil nog op iets anders wijzen. De vragen zijn niet gelijkwaardig. De echte vergelijkingsvraag is:

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

U gebruikt dezelfde kolom voor de where en de on . Dit zou dus de meest efficiënte versie zijn en u wilt een index op location(id) .



  1. Selecteer alle datums tussen twee datums die geen tabel gebruiken (genereer een lijst met datums)

  2. NameError:naam '_mysql' is niet gedefinieerd na wijziging in mysql

  3. MySQL DOE MEE AAN vs GEBRUIKEN?

  4. Kan ik een variabele doorgeven om de instructie als kolomnaam in SQL Server te selecteren?