Оптимальный SQL запрос для проверки того, какие строки в одной большой таблице не существуют в другой, даже более крупной таблице - PullRequest
0 голосов
/ 30 апреля 2020

Настройка: SQL Server Developer Edition, работающий на компьютере с i9, 32 ГБ ОЗУ и 2 ТБ NVMe SSd.

У меня есть база данных на table1, там около ~ 350 000 000 строк. Есть только один столбец (для простоты назовите его table1column). Это varchar(100). Он также имеет некластеризованный индекс.

У меня есть вторая таблица на той же базе данных, которая составляет ~ 400 000 записей. Также есть только один столбец (назовите его table2column). Это varchar(50). Он также имеет некластеризованный индекс.

Вопрос: учитывая большие размеры обеих таблиц, каков оптимальный запрос для получения списка записей в таблице 2 (той, которая содержит записи по 400 КБ), которых не существует в таблице1?

1 Ответ

1 голос
/ 30 апреля 2020

Я бы использовал not exists:

select t2.table2column
from table2 t2
where not exists (select 1 from table1 t1 where t1.table1column = t2.table2column)

Этот запрос должен иметь возможность использовать преимущества существующих индексов в обеих таблицах.

...