Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Возможен ли расчет числа итерраций при выполнения запроса?  [new]
student-uni
Member

Откуда: Одесса
Сообщений: 1102
Дано

Таблица1 с 1 млн Записей и Таблица2 с 1 млн записей.

1. Можно ли как то оперделить число итерраций при выполнении

select * from table1 as t1 inner join table2 as t2 on t1.id1 = t2.id2

Например было бы правильно сказать:

best case = 1млн (каждый ид1 находит ид2 сразу)
worst case = 1 млн + 999 999 + 999998 + ... + 2 + 1 (каждый ид1 находит ид2 только просмотрев все записи в т2)


2. Можно ли сравнить по числу итерраций вышеприведенный запрос с таким запросом :

select * from table1 as t1 inner join table2 as t2 on t1.id1 = t2.id2 or t1.id1 = t2.id3

Колонки ид1, ид2 ид3 имеют тип int

Спасибо

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64) Apr 22 2011 19:23:43 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: ) (Hypervisor)
7 дек 11, 16:38    [11723181]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли расчет числа итерраций при выполнения запроса?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
это про первую колонку плана?
7 дек 11, 16:41    [11723216]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли расчет числа итерраций при выполнения запроса?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
student-uni
. Можно ли как то оперделить число итерраций при выполнении
Можно получить план и его проанализировать.

Но это непростая задача.
7 дек 11, 19:49    [11724883]     Ответить | Цитировать Сообщить модератору
 Re: Возможен ли расчет числа итерраций при выполнения запроса?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
student-uni
Дано

Таблица1 с 1 млн Записей и Таблица2 с 1 млн записей.

Индексов нет вообще? Тяжелый случай.

student-uni
1. Можно ли как то оперделить число итерраций при выполнении


А зачем? За вас это сервер делает и если статистика адекватная то весьма хорошо делает. Или это попытка понять как работает оптимизатор?

student-uni
best case = 1млн (каждый ид1 находит ид2 сразу)

Так будет только если на второй таблице есть индекс по соответствующему ID и сервер реально глюканет, потому что делать мильён лукапов это самоубийство.

student-uni
worst case = 1 млн + 999 999 + 999998 + ... + 2 + 1 (каждый ид1 находит ид2 только просмотрев все записи в т2)

Так сервер в здравом уме делать точно не будет если конечно не форсировать его на LOOP JOIN. А в общем случае, если нет индексов, то это будет HASH или MERGE JOIN и говорить о каком то поиске во второй таблице значения из первой не имеет вообще никакого смысла.

Соединение 2х таблиц в SQL Server-е это совсем не то же самое что 2 вложенных цикла по 2-м массивам в C#, это значительно сложнее, но и оптимальнее на порядок.
9 дек 11, 01:45    [11733629]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить