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