zauważyłem coś dziwnego podczas wykonywania select z 2 tabele:MySQL Query Wybierz za pomocą sub-select trwa zbyt długo
SELECT * FROM table_1 WHERE id IN (
SELECT id_element FROM table_2 WHERE column_2=3103);
To zapytanie wziął approximatively 242 sekund.
Ale kiedy wykonał podkwerenda
SELECT id_element FROM table_2 WHERE column_2=3103
zajęło mniej niż 0.002s (i wynikał 2 rzędy).
Wtedy, kiedy nie
SELECT * FROM table_1 WHERE id IN (/* prev.result */)
było tak samo: 0.002s.
Zastanawiam się, dlaczego MySQL wykonuje pierwsze zapytanie, biorąc pod uwagę znacznie więcej czasu niż dwa ostatnie zapytania oddzielnie? Czy jest to optymalne rozwiązanie do wybierania czegoś na podstawie wyników pod-zapytania?
Pozostałe szczegóły: table_1
ma około. 9000 wierszy i table_2
ma 90000 wierszy.
Po dodaniu indeksu na column_2
z table_2
pierwsze zapytanie zajęło 0,15 s.
ile wyników daje wybór wewnątrz? – Dani
Czy mógłbyś opublikować wynik uruchomienia 'WYBIERZ WYBIERZ * Z tabeli_1 WHERE id IN (SELECT id_element FROM table_2 WHERE column_2 = 3103)'. Spowoduje to wyświetlenie, jakiego planu zapytań i indeksów używa MySQL. –
@Dani post stwierdza, że zapytanie wewnętrzne zwraca 2 wiersze. –