Что лучше в предложении WHERE
?
У меня большая таблица с FK для маленькой таблицы. Я могу выполнять поиск непосредственно в FK или присоединиться к таблице FK и установить ограничение WHERE
для объединенной таблицы. Что лучше / предпочтительнее?
Итак, это:
SELECT lt.* FROM LargeTable lt
WHERE lt.SomeId in(12,55)
Или это:
SELECT lt.* FROM LargeTable lt
INNER JOIN SmallTable st ON lt.SomeId=st.ItemId
WHERE st.Id in(12,55)
Я тестировал это с помощью Установить время статистики на
, но я не ожидал такого результата. Кто может объяснить, что здесь происходит?
Первый тест без соединения:
(946 row(s) affected)
SQL Server Execution Times:
CPU time = 1544 ms, elapsed time = 1580 ms.
Второй тест с объединением
(946 row(s) affected)
SQL Server Execution Times:
CPU time = 2636 ms, elapsed time = 366 ms.
EDIT: когда я выполняю SELECT Id
вместо SELECT *
, тогда первый запрос без соединения имеет меньшее затраченное время, а стоимость запроса в плане выполнения составляет 25% без соединения по сравнению с 75% для запроса с соединением.