Использование Oracle (если это важно). Оба этих оператора Select дадут одинаковый конечный результат, но какой из них быстрее?

SELECT * FROM tbl_A WHERE val IN (SELECT myField FROM tbl_B WHERE ... );

Или было бы лучше выбрать SELECT DISTINCT в подзапросе?

SELECT * FROM tbl_A WHERE val IN (SELECT DISTINCT myField FROM tbl_B WHERE ... );

Благодарность!

3
mang 23 Фев 2016 в 18:13

1 ответ

В DISTINCT нет необходимости, и, вообще говоря, добавление DISTINCT к оператору SELECT увеличит рабочую нагрузку для SQL Server.

Посмотрите на план запроса для обоих. Когда вы выбираете опцию DISTINCT, получаете ли вы дополнительный узел SORT?

2
BrentHS 23 Фев 2016 в 15:33