Предположим, вы используете реальную базу данных (т.е. любую базу данных, кроме MySQL, но я буду использовать Postgres в качестве примера) для выполнения этого запроса:
SELECT * FROM ta WHERE aid IN (SELECT subquery)
Реальная база данных будет смотреть на подзапрос и оценивать его количество строк:
- Если количество строк небольшое (скажем, менее нескольких миллионов)
Он запустит подзапрос, затем создаст хэш идентификаторов в памяти, что также делает их уникальными, что является особенностью IN ().
Тогда, если число строк, извлеченных из ta, является малой частью ta, он будет использовать подходящий индекс для вытягивания строк. Или, если выбрана основная часть таблицы, она просто отсканирует ее полностью и выполнит поиск каждого идентификатора в хэше, что очень быстро.
- Если, однако, количество строк в подзапросе достаточно велико
База данных, вероятно, перепишет ее как объединение JOIN, добавив Sort + Unique к подзапросу.
Однако вы используете MySQL. В этом случае он не будет делать ничего из этого (он будет повторно выполнять подзапрос для каждой строки вашей таблицы), поэтому это займет 1000 лет. К сожалению.