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

Używanie SELECT w SELECT w zapytaniu mysql

W MySQL, wykonanie takiego podzapytania jest "skorelowanym zapytaniem". Oznacza to, że wyniki zewnętrznego SELECT zależy od wyniku wewnętrznego SELECT . W rezultacie Twoje wewnętrzne zapytanie jest wykonywane raz na wiersz, co jest bardzo powolne.

Powinieneś dokonać refaktoryzacji tego zapytania; to, czy dołączysz dwa razy, czy użyjesz dwóch zapytań, jest w większości nieistotne. Dwukrotne dołączenie da ci:

SELECT something
FROM posts
INNER JOIN tag_map ON tag_map.id = posts.id
INNER JOIN tags ON tags.tag_id = tag_map.tag_id
WHERE tags.tag IN ('tag1', ...)

Aby uzyskać więcej informacji, zobacz podręcznik MySQL dotyczący konwertowania podzapytań na JOIN .

Wskazówka:EXPLAIN SELECT pokaże Ci, jak optymalizator planuje obsługę Twojego zapytania. Jeśli zobaczysz DEPENDENT SUBQUERY powinieneś dokonać refaktoryzacji, są one bardzo wolne.



  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 wybrać tylko jedną generację drzewa hierarchicznego przy użyciu relacji rodzic-podrzędny tabeli z SQL?

  2. Wyzwalacze sql Mam błąd podczas przechowywania nazwy kolumny w zmiennej i używam jej dla OLD.myvar w wyzwalaczach sql

  3. PHP:wiele zapytań SQL w jednej instrukcji mysql_query

  4. MySQL wybierz rekordy 1 godzinę temu lub nowsze w kolumnie datetime

  5. Usuwanie MySQL z zagnieżdżonym zapytaniem wybierającym