Что лучше в предложении 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)
Я проверил это с Set statistics time on
, но я не ожидал этого в результате.Кто может объяснить, что здесь происходит?
Первый тест без объединения:
(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.
РЕДАКТИРОВАТЬ: Когда я делаю SELECT Id
вместоравным SELECT *
, тогда первый запрос без объединения имеет меньшее затраченное время, а стоимость запроса в плане выполнения составляет 25% для без объединения против 75% для запроса с объединением.