Это потому, что индекс не очень полезен для такого рода запросов, поэтому база данных должна выполнить полное сканирование таблицы.Если запрос (по какой-то причине) медленнее, чем простой «SELECT * FROM TABLE», сделайте это вместо этого и отфильтруйте нежелательные идентификаторы в программе.вместо списка.Из-за этого есть три возможных способа сделать то же самое (возможно, один из них быстрее):
Исходное утверждение:
select * from mytable where id not in (select id from othertable);
Альтернатива 1:
select * from mytable where not exists
(select 1 from othertable where mytable.id=othertable.id);
Альтернатива 2:
select * from mytable
minus
select mytable.* from mytable in join othertable on mytable.id=othertable.id;
Альтернатива 3: (некрасиво и трудно понять, но если все остальное терпит неудачу ...)
select * from mytable
left outer join othertable on (mytable.id=othertable.id)
where othertable.id is null;