Производительность SQL Server - отбор или внутреннее объединение? - PullRequest
3 голосов
/ 29 апреля 2011

Я размышлял над вопросом, какое из этих двух утверждений может иметь более высокую производительность (и почему):

select * from formelement 
where formid = (select id from form where name = 'Test')

или

select * 
from formelement fe 
inner join form f on fe.formid = f.id 
where f.name = 'Test'

Одна форма содержит несколько элементов формы, один элемент формы всегда является частью одной формы.

Спасибо

Dennis

Ответы [ 2 ]

3 голосов
/ 29 апреля 2011

посмотрите на план выполнения, скорее всего, он будет таким же, если вы добавите фильтрацию к объединению, в котором говорится, что объединение вернет все из обеих таблиц, входное значение не будет

Я действительно предпочитаю EXISTS этим двум

select * from formelement  fe
where exists (select 1 from form f 
                 where f.name='Test' 
                 and fe.formid =f.id)
1 голос
/ 29 апреля 2011

Производительность зависит от плана запроса, выбранного механизмом SQL Server.План запроса зависит от множества факторов, включая (но не ограничиваясь) SQL, точную структуру таблицы, статистику таблиц, доступные индексы и т. Д.

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

(Для больших сложных запросов точная формулировка SQL может что бы ни случилось, в книге SQL Tuning Дана Тау даётся много хороших советов по этому поводу.)

...