Mam dwie tabele:Kiedy lepiej nie używać połączenia wewnętrznego?
table1 (id, name, connte)
table2 (id, name, connte)
są podłączone poprzez table1.connte i table2.connte. A każdy z nich zawiera 100 rekordów.
Teraz jeśli chcę usunąć rekord z Tabela1 z ID = 20 oraz jej odpowiednimi dzieci w Table2, lepiej jest wykonać następujące czynności:
DELETE d1,d2 FROM table1 d1 INNER JOIN table2 d2 ON d1.connte= d2.connte WHERE d1.id = 20
lub co następuje:
select connte from table1 where id = 20
--Store connte in a variable say aabc--
delete from table2 where connte = aabc -> execute this first
delete from table1 where id = 20 -> execute this second
Jeśli istnieje tylko jeden rodzic i jedno dziecko dla rekordu, który chcę usunąć (tutaj table1.id = 20), czy nie jest drogie wykonywanie łączenia wewnętrznego dla całej tabeli?
Używam tego zapytania z JAVA (tak JDBC), więc czy jest droższe (z punktu widzenia wydajności) uruchamianie wielu zapytań lub sprzężenia wewnętrznego dla wyżej wymienionego warunku?
UWAGA: Zakładając, że tabele nie zawierają więzów integralności. Tak więc nie używam usuwania kaskadowego.
Hmm..ok, ale co, kiedy mam, powiedzmy sto tysięcy lub milion rekordów? Które podejście byłoby wtedy lepsze dla mojego wspomnianego stanu? – Harke
W dalszym ciągu zalecałbym, aby DBMS go obsługiwał. Wie, jak zrobić te optymalizacje lepiej, niż to możliwe. – Oleksi
Czy jest jakiś sposób mogę wiedzieć, jak działa wewnętrzne sprzężenie? Czy nie przyłączysz się do dwóch tabel z milionem nagrań każdy, zabiera czas? (nawet po filtrowaniu z klauzulą ON istnieje możliwość, że istnieje wiele rekordów do dołączenia) – Harke