2013-10-07 7 views
4

Как выбрать основную таблицу при объединении нескольких таблиц с использованием внутреннего соединения?Внутреннее соединение SQL Server

A) Должен ли я выбирать основную таблицу в зависимости от ее количества столбцов/строк (например, большой основной в качестве основной таблицы или для того, чтобы сохранить большую таблицу в качестве таблицы соединений)?

B) Если я выберу таблицу, содержащую столбец, который я использую в качестве условия в качестве основной таблицы, будет ли какое-либо преимущество в производительности?

Например, скажем, что есть 2 таблицы. Таблица 1 & Таблица2. Будет ли какая-то разница в производительности между двумя решениями приведены ниже

Решение 1:

select t1.empid , t1.name , t1.dept , t2.add , t2.city , t2.country 
from Table1 t1 
inner join Table2 t2 on t2.empid = t1.empid 
where t1.year = 2010 

Решение 2:

select t1.empid , t1.name , t1.dept , t2.add , t2.city , t2.country 
from Table2 t2 
inner join Table1 t1 on t1.empid = t2.empid 
where t1.year = 2010 
+1

Вы можете проверить планы выполнения, но я был бы очень удивлен, если бы был другой. – HLGEM

+0

Я не думаю, что это будет иметь значение. – Nilesh

+0

Спасибо HLGEM & Nilesh за ваши комментарии. Если я выберу большую таблицу в качестве основной таблицы, будет ли разница? Есть ли какое-либо общее правило большого пальца для внутреннего соединения, чтобы сделать его эффективным? –

ответ

1

Основная таблица должна быть одна, что вы используете самые столбцы , поэтому, если вы используете таблицу1 с 4 столбцами и вам нужно получить один столбец из таблицы2.

2

Нет никакой разницы. SQL Server выберет «основную» таблицу и тип соединения, основанный на статистике таблицы.

Пример: Таблица 1 содержит 5 строк (и только один год 2010). Таблица 2 содержит 10000 строк. SQL Server будет генерировать объединение вложенных циклов с Table1 как внешний вход, Table2 как внутренний вход, чтобы получить 1 пробег более 1000 строк. Он определенно не будет генерировать 10000 циклов в течение 1 строки.

Вы по-прежнему можете получать разные планы выполнения для вышеприведенных инструкций, но только в том случае, если SQL Server решит, что план должен быть тривиальным и пропустить фазу оптимизации (например, таблицы почти пусты, например).

Смежные вопросы