PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Sprzężenie wewnętrzne kontra robienie gdzie w klauzuli

Czy jest różnica między wysłaniem jednego zapytania a wydaniem dwóch zapytań? Cóż, mam taką nadzieję. Silnik SQL działa i wykonuje dwa razy więcej pracy (z pewnej perspektywy) dla dwóch zapytań.

Ogólnie rzecz biorąc, analizowanie pojedynczego zapytania będzie szybsze niż analizowanie jednego zapytania, zwracanie pośredniego zestawu wyników, a następnie przesyłanie go z powrotem do innego zapytania. Kompilacja zapytań i przekazywanie danych tam iz powrotem wiąże się z dodatkowymi kosztami.

Dla tego zapytania:

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

Potrzebujesz indeksu users(location) i location(id) .

Chciałbym zwrócić uwagę na coś innego. Zapytania nie są równoważne. Prawdziwe zapytanie porównawcze to:

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

Używasz tej samej kolumny dla where i on . Dlatego byłaby to najbardziej wydajna wersja i potrzebujesz indeksu na location(id) .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utwórz alias dla tabeli PostgreSQL

  2. Zastępowanie sekwencji liczbą losową

  3. dblink nie używa pliku .pgpass

  4. Laravel 5.3 Elokwentne transakcje i ograniczenia dotyczące kluczy obcych

  5. Wyraź CTE za pomocą Arel