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

Откуда:
Сообщений: 103
В общем такая ситуация.

Есть запрос вида:
Select Table.ID
        From (Select fn_Test AS ID) AS FuncTest INNER JOIN
                   Table ON FuncTest.ID = Table.ID

Выполняется около секунды, а запрос:
15 мар 12, 13:39    [12252846]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Max_Tpop
Member

Откуда:
Сообщений: 103
Select Table.ID
        From (Select DISTINCT fn_Test AS ID) AS FuncTest INNER JOIN
                   Table ON FuncTest.ID = Table.ID

Мгновенно, в чем разница???
15 мар 12, 13:40    [12252862]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Max_Tpop
в чем разница???

В том, что это разные запросы
15 мар 12, 13:41    [12252870]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Max_Tpop
Member

Откуда:
Сообщений: 103
Glory
Max_Tpop
в чем разница???

В том, что это разные запросы


Может быть, но все же это скалярная функция, и возвращается один ID. В данном случае как дистинкт может ускорить запрос? Я этого не понимаю.
15 мар 12, 13:43    [12252901]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Max_Tpop
Может быть, но все же это скалярная функция, и возвращается один ID

Где скалярная функция ?
15 мар 12, 13:45    [12252923]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Max_Tpop
В данном случае как дистинкт может ускорить запрос? Я этого не понимаю.

Тогда взгляните в планы выполнения
15 мар 12, 13:45    [12252930]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Max_Tpop
Member

Откуда:
Сообщений: 103
Glory
Где скалярная функция ?

fn_Test это скалярная функция

Glory
Тогда взгляните в планы выполнения

Планы разные
15 мар 12, 13:49    [12252968]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Max_Tpop
Планы разные

Ну если разные, то в чем вопрос

Max_Tpop
fn_Test это скалярная функция

И зачем из нее делать подзапрос тогда ?
15 мар 12, 13:59    [12253110]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Max_Tpop
Member

Откуда:
Сообщений: 103
Glory
И зачем из нее делать подзапрос тогда ?


Что бы отсечь объем данных, т.е. от малого к большему)
15 мар 12, 14:01    [12253137]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Max_Tpop
Что бы отсечь объем данных, т.е. от малого к большему)

И какой же объем данных у скалярной функции ?
15 мар 12, 14:03    [12253154]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Max_Tpop
Member

Откуда:
Сообщений: 103
Glory
И какой же объем данных у скалярной функции ?


Не у функции а у таблицы, с которой происходит джойн
15 мар 12, 14:06    [12253190]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Max_Tpop
Не у функции а у таблицы, с которой происходит джойн

А функия то зачем в подзапрос превращена ?
15 мар 12, 14:07    [12253209]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Max_Tpop
Member

Откуда:
Сообщений: 103
Glory
А функия то зачем в подзапрос превращена ?


А как тогда еще джойнить? Но вопрос то не в этом, а в DISTINCT.
15 мар 12, 14:10    [12253239]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Max_Tpop
А как тогда еще джойнить? Но вопрос то не в этом, а в DISTINCT.

На кой нужен джойн для скалярной функции ?
Она же скалярная
15 мар 12, 14:11    [12253253]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Max_Tpop
Но вопрос то не в этом, а в DISTINCT.

Разные запросы - разные планы - разное время
Что из этого неясно ?
15 мар 12, 14:12    [12253265]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Max_Tpop
Member

Откуда:
Сообщений: 103
Glory
На кой нужен джойн для скалярной функции ?


Если так запрос писать,
Select Table.ID
From Table
Where Table.ID = fn_Test()

то падает производительность, вот из-за этого и вложенный подзапрос.
15 мар 12, 14:16    [12253311]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Max_Tpop
то падает производительность, вот из-за этого и вложенный подзапрос.

переписать, как инлайн + cross apply ?!
15 мар 12, 14:17    [12253323]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Max_Tpop
то падает производительность, вот из-за этого и вложенный подзапрос.

Вы кроме того, что планы разные, увидели, в чем именно они разные ?

Select Table.ID
From Table
Where Table.ID = (select fn_Test())

declare @x ...
set @x = fn_Test()
Select Table.ID
From Table
Where Table.ID = @x
15 мар 12, 14:19    [12253337]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Max_Tpop
Member

Откуда:
Сообщений: 103
Knyazev Alexey
переписать, как инлайн + cross apply ?!


А можно пример?
15 мар 12, 14:19    [12253339]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Max_Tpop
Member

Откуда:
Сообщений: 103
Glory
Вы кроме того, что планы разные, увидели, в чем именно они разные ?


Отличие в Hash Math

Glory
declare @x ...
set @x = fn_Test()
Select Table.ID
From Table
Where Table.ID = @x


Так не пойдет этот запрос для представления.
15 мар 12, 14:24    [12253401]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Max_Tpop,

select @@version во-первых.
Во-вторых, скалярные функции - это в принципе тормоза, так что лучше переделайте на табличную inline
15 мар 12, 14:34    [12253514]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Max_Tpop
Member

Откуда:
Сообщений: 103
iljy
@@version


Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1
15 мар 12, 14:36    [12253538]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Max_Tpop,

патчьте
15 мар 12, 14:42    [12253621]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
А чо, скалярную функцию уже можно без схемы вызывать?
15 мар 12, 17:05    [12255451]     Ответить | Цитировать Сообщить модератору
 Re: Distinct?  [new]
Max_Tpop
Member

Откуда:
Сообщений: 103
iap
А чо, скалярную функцию уже можно без схемы вызывать?


Нет конечно же. Это я так для наглядности, просто пример.
15 мар 12, 19:05    [12256318]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить