sql >> Databáze >  >> RDS >> PostgreSQL

Vnitřní spojení versus provedení klauzule where in

Je rozdíl mezi zadáním jednoho dotazu a zadáním dvou dotazů? No, v to rozhodně doufám. SQL engine dělá práci a udělá dvakrát tolik práce (z určité perspektivy) pro dva dotazy.

Obecně platí, že analýza jednoho dotazu bude rychlejší než analýza jednoho dotazu, vrácení mezilehlé sady výsledků a její následné vložení zpět do jiného dotazu. Při kompilaci dotazů a při předávání dat tam a zpět existuje režie.

Pro tento dotaz:

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

Chcete index na users(location) a location(id) .

Chci upozornit na něco jiného. Dotazy nejsou ekvivalentní. Skutečný srovnávací dotaz je:

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

Používáte stejný sloupec pro where a on . Toto by tedy byla nejúčinnější verze a chcete index na location(id) .



  1. db.create_all() Objekt 'NoneType' nemá atribut 'drivername'

  2. Nahrazení textu ve sloupci BLOB

  3. Nefunguje FULLTEXTOVÉ vyhledávání MySQL (Windows10) s tabulkami MyISAM

  4. Rychlé nalezení podobných řetězců pomocí PostgreSQL