SELECT id FROM A LEFT OUTER JOIN B ON A.id=B.id WHERE B.id IS NULL
możesz to zrobić. sprzężenie zewnętrzne powinno zapewnić niewielką wydajność, ale niewiele.
nowe systemy baz danych prawdopodobnie i tak zoptymalizują Twoje zapytanie, więc nie będzie żadnej różnicy.
prawidłowym sposobem jest buforowanie! spróbuj bufora zapytań i buforowania na poziomie aplikacji, jeśli to możliwe.
oczywiście potrzebujesz odpowiednich indeksów.
i przez właściwe mam na myśli obie tabele, a najlepiej indeks skrótu, ponieważ będzie miał statyczny czas wyszukiwania w porównaniu do dowolnego drzewa, które ma logarytmiczne
Spróbuj umieścić wyjaśnienie przed zapytaniem, aby zobaczyć, co naprawdę to spowalnia.
jeśli naprawdę potrzebujesz, aby było to szybkie, możesz zmienić strukturę danych.
możesz ewentualnie utworzyć wyzwalacz, aby oznaczyć flagę w tabeli A, niezależnie od tego, czy istnieje odpowiedni wpis w tabeli be. oczywiście ta nadmiarowość danych id, ale czasami warto. po prostu pomyśl o tym jako o buforowaniu.
ostatnia myśl:możesz spróbować SELECT id FROM A WHERE id NOT IN (SELECT id FROM B)
może być trochę szybszy, ponieważ nie jest konieczne faktyczne łączenie, ale może być również wolniejszy, ponieważ wyszukiwanie w zestawie be będzie pełnym skanem. Nie jestem do końca pewien, jak to zostanie przetworzone, ale może warto spróbować.