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 № 1Jesteś 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