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

Czy klauzula MySQL IN wykonuje podzapytanie wielokrotnie?

Twoje założenie jest fałszywe; podzapytanie zostanie wykonane tylko raz. Powodem, dla którego jest to wolniejsze niż łączenie, jest to, że IN nie może korzystać z indeksów; musi skanować swoje argumenty raz za każdym razem, gdy WHERE klauzula jest oceniana, to znaczy raz na wiersz w tabeli A. Możesz zoptymalizować zapytanie bez używania zmiennych lub procedur składowanych, po prostu zastępując IN ze sprzężeniem, w ten sposób:

SELECT tableA.field1, tableA.field2, [...]
FROM tableA 
  INNER JOIN tableB ON tableA.id = tableB.id

O ile nie masz nic przeciwko odzyskaniu każdego pola z obu tabel, musisz wyliczyć pola, które chcesz w SELECT klauzula; tableA.* na przykład wywoła błąd składni.



  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 pobrać wartości rozwijane z bazy danych i wyświetlić je w jsp

  2. Połącz się ze zdalnym serwerem MySQL za pomocą SSL z PHP

  3. System śledzenia MySQL

  4. Przechowywanie identyfikatorów jako wartości oddzielonych przecinkami

  5. Pomoc dotycząca zapytań mysql dla wyświetlania hierarchii