/ / Dlaczego mysql nie może dołączyć do 2 dużych / dużych tabel? - mysql, dołącz, ładowanie

Dlaczego mysql nie może dołączyć do 2 dużych / dużych tabel? - mysql, join, ładowanie

Oto mój problem: Mam 2 duży stół, nazywam to A n B.

Jeśli dołączę do tej tabeli 2 za pomocą bardzo prostego zapytania, takiego jak ten przykład:

SELECT COUNT(*) FROM lib_judul, lib_buku

Wtedy proces mysql jeszcze się nie skończył, nie wiemczemu. Tabela A zawiera 156 670 rekordów (33,6 MB), a tabela B ma 130 028 rekordów (34,6 MB). Myślę, że moje zapytanie jest słuszne, ponieważ próbowałem wcześniej dołączyć do tabeli A z tabelą C (bardzo mniejszą tabelą) i działa ona dobrze.

Co mam zrobić, aby to zrobić?

Odpowiedzi:

3 dla odpowiedzi № 1

Jesteś niejawny CROSS JOIN w kodzie, który tworzy pełny Produkt kartezjański z dwóch tabel. Tworzy nową tabelę z 156.670 razy 130.028 rzędów. To więcej niż 20 miliardów (20 631 542 760) rekordów.


0 dla odpowiedzi nr 2

Jest tak, ponieważ nie ma wspólnego pola dla obu tabel. Spróbuj użyć Explicit Join tak jak poniżej:

SELECT
COUNT(*)
FROM lib_judul A
JOIN lib_buku B ON A.id=B.id

0 dla odpowiedzi № 3

Koszt twojego zapytania może być zbyt duży. Twoje zapytanie ma koszt = 156.670 x 130.028 = 20.631.542,760 I / O.
Plan wykonania zapytania najpierw wykona łączenie, a następnie wybierz kolumnę.
Poznaj swoją potrzebę. Być może możesz dodać trochę „warunku”, zanim dołączysz.

Przykład:
to zapytanie:

WYBIERZ LICZYĆ(*) FROM lib_judul A, lib_buku B GDZIE B.id = 1 ORAZ B.id = A.id


można zoptymalizować w następujący sposób:

WYBIERZ SPOŚRÓD (WYBIERZ * Z lib_judul) A PRZYSTĄPIĆ (WYBIERZ * Z lib_buku GDZIE lib_buku.id = 1) B ON B.id = A.id