SELECT id FROM A LEFT OUTER JOIN B ON A.id=B.id WHERE B.id IS NULL
можете да направите това. външното съединение трябва да донесе малко производителност, но не много.
новите системи за бази данни вероятно така или иначе ще оптимизират вашата заявка, така че няма да има разлика.
правилният начин тук е кеширането! опитайте кеша на заявки и кеширането на ниво приложение, ако е възможно.
разбира се, имате нужда от подходящи индекси.
и под правилно имам предвид и двете таблици и за предпочитане хеш индекс, тъй като той ще има статично време за търсене в сравнение с всяко дърво, което има логаритмичен
Опитайте да поставите обяснение преди заявката, за да видите какво наистина забавя това.
ако наистина се нуждаете от това да бъде бързо, можете да преструктурирате структурата си от данни.
бихте могли да създадете тригер за маркиране на флаг в таблица A дали има съответен запис в таблица be. разбира се това дублиране на идентификационни данни, но понякога си заслужава. просто мислете за това като за кеширане.
една последна мисъл:можете да опитате SELECT id FROM A WHERE id NOT IN (SELECT id FROM B)
може да е малко по-бързо, защото не е необходимо действително свързване, но може да е и по-бавно, защото търсенето в набора от be ще бъде пълно сканиране. Не съм сигурен как ще бъде обработено това, но може да си струва да опитате.