Что лучше - SELECT TOP (1) или INNER JOIN?

Допустим, у меня есть следующий запрос:

SELECT Id, Name, ForeignKeyId, 
(SELECT TOP (1) FtName FROM ForeignTable WHERE FtId = ForeignKeyId) 
FROM Table

Будет ли этот запрос выполняться быстрее, если он написан с помощью JOIN:

SELECT Id, Name, ForeignKeyId, FtName
FROM Table t
LEFT OUTER JOIN ForeignTable ft
ON ft.FtId = t.ForeignTableIf

Просто любопытно ... также, если JOIN быстрее, будет ли он быстрее во всех случаях (таблицы с большим количеством столбцы, большое количество строк)?

РЕДАКТИРОВАТЬ: Запросы, которые я написал, предназначены только для иллюстрации концепции TOP (1) и JOIN. Да, я знаю о плане выполнения запроса в SQL Server, но я не ищу оптимизацию одного запроса - я пытаюсь понять, есть ли определенная теория за SELECT TOP (1) vs JOIN и предпочтительнее ли определенный подход из-за скорости (не из-за личных предпочтений или удобочитаемости.)

РЕДАКТИРОВАТЬ2: Я хотел бы поблагодарить Аарона за его подробный ответ и призвать людей проверить бесплатный инструмент его компании SQL Sentry Plan Explorer , о котором он упомянул в своем ответе.

5
задан nikib3ro 30 August 2011 в 18:04
поделиться