Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy jest coś nie tak ze złączeniami, które nie używają słowa kluczowego JOIN w SQL lub MySQL?

Filtrowanie złączeń wyłącznie za pomocą WHERE może być bardzo nieefektywny w niektórych typowych scenariuszach. Na przykład:

SELECT * FROM people p, companies c 
    WHERE p.companyID = c.id AND p.firstName = 'Daniel'

Większość baz danych wykona to zapytanie całkiem dosłownie, najpierw biorąc produkt kartezjański z people i companies tabele i następnie filtrowanie według tych, które mają pasujące companyID i id pola. Chociaż w pełni nieograniczony produkt nie istnieje nigdzie poza pamięcią i to tylko przez chwilę, jego obliczenie zajmuje trochę czasu.

Lepszym podejściem jest zgrupowanie ograniczeń za pomocą JOIN s tam, gdzie ma to zastosowanie. Jest to nie tylko subiektywnie łatwiejsze do odczytania, ale także znacznie wydajniejsze. A zatem:

SELECT * FROM people p JOIN companies c ON p.companyID = c.id
    WHERE p.firstName = 'Daniel'

To trochę dłużej, ale baza danych jest w stanie spojrzeć na ON klauzuli i użyj jej do obliczenia w pełni ograniczonego JOIN bezpośrednio, zamiast zaczynać od wszystko a następnie ograniczenie w dół. Jest to szybsze do obliczeń (zwłaszcza w przypadku dużych zestawów danych i/lub złączeń wielu tabel) i wymaga mniej pamięci.

Zmieniam każde zapytanie, które widzę, które używa „przecinka JOIN " składnia. Moim zdaniem jedynym celem jego istnienia jest zwięzłość. Biorąc pod uwagę wpływ na wydajność, nie sądzę, aby był to przekonujący powód.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zsynchronizować bazę danych SQLite na telefonie z systemem Android z bazą danych MySQL na serwerze?

  2. wyświetlaj dane z bazy danych SQL do tabeli php/html

  3. Przyspieszenie liczenia wierszy w MySQL

  4. SQLSTATE[HY093]:Nieprawidłowy numer parametru:parametr nie został zdefiniowany

  5. Jak używać natywnego hasła w MySQL 5.7