SELECT id FROM A LEFT OUTER JOIN B ON A.id=B.id WHERE B.id IS NULL
du kan göra det här. den yttre sammanfogningen bör ge lite prestanda, men inte mycket.
nya databassystem kommer förmodligen att optimera din fråga ändå så att det inte blir någon skillnad.
det korrekta sättet här är cachning! prova frågecachern och cachelagring på programnivå om möjligt.
självklart behöver du ordentliga index.
och med korrekt menar jag på båda tabellerna och helst ett hashindex eftersom det kommer att ha statisk uppslagstid i jämförelse med alla träd som har logaritmisk
Försök att lägga en förklaring före frågan för att se vad som verkligen saktar ner detta.
om du verkligen behöver detta för att vara snabbt kan du omstrukturera din datastruktur.
du kan möjligen skapa en trigger för att markera en flagga i tabell A om det finns en motsvarande post i tabellen vara. naturligtvis denna id-dataredundans, men ibland är det värt det. tänk bara på det som cachning.
en sista tanke:du kan prova SELECT id FROM A WHERE id NOT IN (SELECT id FROM B)
det kan vara lite snabbare eftersom ingen faktisk sammanfogning är nödvändig, men det kan också vara långsammare eftersom uppslagningen i uppsättningen av kommer att vara en fullständig genomsökning. Jag är inte riktigt säker på hur detta kommer att bearbetas men det kan vara värt ett försök.