У меня есть две таблицы, одна маленькая (~ 400 строк), одна большая (~ 15 миллионов строк), и я пытаюсь найти записи из маленькой таблицы, у которой нет связанная запись в большой таблице.Ошибка производительности с выбором запроса в Firebird
Я столкнулся с массовые проблемы с производительностью с запросом.
Этот запрос:
SELECT * FROM small_table WHERE NOT EXISTS
(SELECT NULL FROM large_table WHERE large_table.small_id = small_table.id)
Столбец large_table.small_id
ссылки small_table-х id
поле, которое является его первичным ключом. План запроса показывает, что внешний индекс ключ используется для large_table:
PLAN (large_table (RDB$FOREIGN70))
PLAN (small_table NATURAL)
Статистика пересчитаны для индексов на обеих таблицах.
Выполнение запроса занимает несколько часов. Ожидается ли это?
- Если да, могу ли я переписать запрос так, чтобы он был быстрее?
- Если нет, что может быть неправильным?