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

Użyj związku lub połączenia — co jest szybsze

Union będzie szybsze, ponieważ po prostu przekazuje pierwszą instrukcję SELECT, a następnie analizuje drugą instrukcję SELECT i dodaje wyniki na koniec tabeli wyjściowej.

Połączenie przejdzie przez każdy wiersz obu tabel, znajdując dopasowania w drugiej tabeli, dlatego wymaga znacznie więcej przetwarzania ze względu na wyszukiwanie pasujących wierszy dla każdego wiersza.

EDYTUJ

Mówiąc Union mam na myśli Union All, ponieważ wydawało się to adekwatne do tego, co próbowałeś osiągnąć. Chociaż normalna Unia jest zazwyczaj szybsza niż Dołącz.

EDYTUJ 2 (Odpowiedz na komentarz @seebiscuit)

Nie zgadzam się z nim. Technicznie rzecz biorąc, bez względu na to, jak dobre jest twoje sprzężenie, „JOIN” jest nadal droższe niż czysta konkatenacja. Zrobiłem wpis na blogu, aby to udowodnić na moim blogu codePERF[dot]net . Praktycznie rzecz biorąc służą one dwóm zupełnie różnym celom i ważniejsze jest, aby upewnić się, że indeksowanie jest prawidłowe i używać odpowiedniego narzędzia do pracy.

Technicznie rzecz biorąc, myślę, że można to podsumować za pomocą następujących 2 planów wykonania zaczerpniętych z mojego wpisu na blogu:

UNION ALL Plan wykonania

JOIN Plan wykonania

Praktyczne wyniki

Praktycznie rzecz biorąc, różnica w wyszukiwaniu indeksu klastrowego jest znikoma:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaka jest najlepsza praktyka ograniczania określonych stron tylko do zalogowanych użytkowników w Codeigniter?

  2. MySQL:Tworzenie bazy danych jak?

  3. mysql - zwróć pierwszą kolumnę raz i wszystkie odpowiadające jej dane

  4. Używanie JDeveloper z bazą danych MySQL i bazą danych Oracle na AWS RDS, część 2

  5. Railsy instalują mysql - Błąd podczas instalowania mysql2:BŁĄD:Nie udało się zbudować natywnego rozszerzenia gem