Я предполагаю, что один или оба из TableA.SIM1
и TableB.SIM2
не проиндексированы. Либо это, либо это разные типы данных (например, VARCHAR
и NUMERIC
). Попробуйте:
CREATE INDEX index_name1 ON TableA (SIM1);
CREATE INDEX index_name2 ON TableB (SIM2);
Без индексов этот запрос будет очень медленным. Одна таблица будет доступна запись за записью, что нормально, так как вы выводите всю таблицу целиком. Чтобы найти соответствующую запись в другой таблице, ее нужно найти на основе отношения SIM1 = SIM2
.
Чтобы найти записи в другой таблице без индекса, необходимо просмотреть каждую запись. Это линейный или O (n) поиск. Поместите полмиллиона записей в каждую таблицу, и это огромное количество сравнений, необходимых для поиска всех совпадений (миллиарды в фактах).
С индексами совпадение записей почти мгновенно.
Думайте об этом так: индексирование столбцов похоже на размещение телефонной книги в алфавитном порядке. Это облегчает поиск фамилий. Если телефонная книга вообще не была отсортирована, сколько времени вам понадобится, чтобы найти чей-то номер телефона?
Теперь умножьте это на полмиллиона.