Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Владимир Затуливетер Member Откуда: Сообщений: 427 |
Тест 1 и 2 показывают что оптимизатор вроде как учитывает последовательность таблиц, та таблица которая идет первой в запросе - становится внешней а вторая внутренней. Вопрос в следующем, всегда ли это так, и если да, то где это написано в документации? А если последовательность таблиц не гарантирована join хинтом, то можно ли как-то указать какая таблица будет внешней а какая внутренней, т.е. каким либо образом гарантировать порядок таблиц с помощью именно хинтов. Заранее спасибо. use tempdb; go if object_id('dbo.t1') is not null drop table dbo.t1 if object_id('dbo.t2') is not null drop table dbo.t2 create table dbo.t1 ( id int , val char(100) , constraint PK_T1 primary key clustered ( id ) ) create table dbo.t2 ( id int , val char(100) , constraint PK_T2 primary key clustered ( id ) ) go ; with cte ( id ) as ( select 1 union all select id + 1 from cte where id < 1000000 ) insert into dbo.t2 ( id ) select id from cte option ( maxrecursion 0 ); go ; with cte ( id ) as ( select 0 union all select id + 1 from cte where id < 10 ) insert into dbo.t1 ( id ) select id from cte option ( maxrecursion 0 ); go -- на всякий случай :) update statistics dbo.t1; update statistics dbo.t2; go -- тест1 t1 join t2 select * from t1 inner loop join t2 on t1.id = t2.id -- тест2 t2 join t1 select * from t2 inner loop join t1 on t1.id = t2.id Microsoft SQL Server 2012 - 11.0.2100.60 (X64) Feb 10 2012 19:39:15 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) |
18 мар 13, 10:04 [14061142] Ответить | Цитировать Сообщить модератору |
Оппть
Guest |
Владимир Затуливетер, option (force order) |
18 мар 13, 10:15 [14061191] Ответить | Цитировать Сообщить модератору |
Владимир Затуливетер Member Откуда: Сообщений: 427 |
FORCE ORDER как раз не гарантирует "сохраняется порядок соединения" - т.е. порядок джойнов (а не порядок таблиц в джойнах) "не влияет на возможный реверс ролей" - т.е. в одном соединении таблицы могут меняться местами (t1 join t2 join t3) или так например (t2 join t1 join t3). |
||||
18 мар 13, 10:31 [14061250] Ответить | Цитировать Сообщить модератору |
Мистер Хенки Member Откуда: канализация Сообщений: 6615 |
Это при хеш соединении
|
||||||||
18 мар 13, 12:21 [14061766] Ответить | Цитировать Сообщить модератору |
Владимир Затуливетер Member Откуда: Сообщений: 427 |
Мистер Хенки, Да похоже на правду. Спасибо! |
19 мар 13, 12:36 [14066614] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |