SQL WHERE в большой таблице -> Сначала присоединиться к маленькой таблице или поместить FK непосредственно в предложение WHERE?

Что лучше в предложении 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% для запроса с соединением.

5
задан Erik Dekker 21 December 2011 в 16:42
поделиться