Лучше запросить на FK или PK в запросе соединения - PullRequest
1 голос
/ 20 сентября 2010

Используя SQL2k5 и предполагая, что столбцы [ID] являются кластеризованным PK, а столбцы [FK ...] имеют некластеризованный индекс из двух запросов, какое предложение WHERE более эффективно?* ИЛИ

SELECT *
FROM [table1]
INNER JOIN [table2] ON [table2].[ID] = [table1].[FK_table2]
INNER JOIN [table3] ON [table3].[ID] = [table1].[FK_table3]
WHERE
    [table2].[ID] = @table2_id
    AND [table3].[ID] = @table3_id

Один предпочтительнее или лучше другого?Будет ли разница в производительности заметна при использовании одного над другим?

Ответы [ 2 ]

2 голосов
/ 20 сентября 2010

запустите это:

SET SHOWPLAN_ALL ON

, затем запустите каждую версию ваших запросов. Он будет отображать план выполнения запроса, а не наборы результатов.

Держу пари, они отображают точно такой же план выполнения. Планы выполнения будут оптимизированы, чтобы быть точно такими же, независимо от того, как вы это делаете. Тем не менее, я бы закодировал его как первую версию, поскольку для человека, читающего запрос, понятнее, каково ваше намерение.

1 голос
/ 20 сентября 2010

Я не думаю, что между этими двумя способами есть существенная разница в производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...