Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите оптимизировать запрос  [new]
Piter Ivanoff
Guest
Здравствуйте. Подскажите как оптимизировать такую штуку. Есть два "пользователя" и вьюха, которая делается за 2 секунды для каждого из них. Эта вьюха вызывается потом из другой вьюхи, которая ее "разворачивает" (в первой просто коды возвращаются, а здесь джойнами по этим кодам подтягиваются названия и прочая красявость). Так вот - запрос из второй делается тоже 2-3 секунды. Проблема начинается когда вместо запроса "select * from vwView2" я делаю "select top 10 * from vwView2". Запрос у одного делается теже 2 секунды, а у другого - 10 секунд. полные планы запросов и у первого пользователя и у второго на вторую вьюху абсолютно одинаковые. Откуда берется 5 разница во времени запроса не понимаю. И еще, из-за чего так просиходит, что полная выборка из вьюхи происходит во много раз быстрее, чем "Top 10" из нее же ?
21 сен 09, 11:07    [7685782]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Применение top без order by - вообще-то не часто нужно
Вы уверены, что это не ошибка ?
21 сен 09, 11:11    [7685807]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
Piter Ivanoff
Guest
пардон, не написал. конечно выборка с Order by идет
21 сен 09, 11:47    [7686103]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Piter Ivanoff
полные планы запросов и у первого пользователя и у второго на вторую вьюху абсолютно одинаковые
Покажите, пожалуйста, сам запрос
и его действительные планы выполнения в текстовом виде
21 сен 09, 11:53    [7686157]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
Piter Ivanoff
Guest
Планы и сами запросы я, к сожалению, выложить не могу - политика безопасности компании. Они абсолютно одинаковы до последней запятой в обоих вызовах (я сравнивал только выборки с "Top", поскольку только они значимы.)
Пользователь А:
select * from vwView2 order by id desc (4 sec, 18600 rows)
select top 10 * from vwView2 order by id desc (1 sec)

Пользователь Б:
select * from vwView2 order by id desc (3 sec, 37 rows)
select top 10 * from vwView2 order by id desc (10 sec)

Понимаю, что без самого запроса и плана определнное что-то сказать сложно, но все таки,
из-за чего теоретически может быть такое расхождение по выполнению?
21 сен 09, 14:59    [7687532]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
Piter Ivanoff
Guest
Забыл сказать что дело происходит на
Microsoft SQL Server 2000 - 8.00.2055 (Intel X86) Dec 16 2008 19:46:53
on Windows NT 5.0 (Build 2195: Service Pack 4)
21 сен 09, 15:01    [7687550]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
Piter Ivanoff
Планы и сами запросы я, к сожалению, выложить не могу - политика безопасности компании. Они абсолютно одинаковы до последней запятой в обоих вызовах (я сравнивал только выборки с "Top", поскольку только они значимы.)
Пользователь А:
select * from vwView2 order by id desc (4 sec, 18600 rows)
select top 10 * from vwView2 order by id desc (1 sec)

Пользователь Б:
select * from vwView2 order by id desc (3 sec, 37 rows)
select top 10 * from vwView2 order by id desc (10 sec)

Понимаю, что без самого запроса и плана определнное что-то сказать сложно, но все таки,
из-за чего теоретически может быть такое расхождение по выполнению?

А почему наборы данных разные то ?

Пользователь А:
select * from vwView2 order by id desc (4 sec, 18600 rows)

Пользователь Б:
select * from vwView2 order by id desc (3 sec, 37 rows)
21 сен 09, 15:03    [7687567]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
Piter Ivanoff
Guest
эта вьюха выдает данные с которыми может работать текущий пользователь. в ней идет выборка по SYSTEM_USER

Пользователь Б скажем обычный менеджер потому он видит только свои строки
Пользователь А директор и видет еще 50 подчиненных.
21 сен 09, 15:08    [7687617]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
Piter Ivanoff
эта вьюха выдает данные с которыми может работать текущий пользователь. в ней идет выборка по SYSTEM_USER

Пользователь Б скажем обычный менеджер потому он видит только свои строки
Пользователь А директор и видет еще 50 подчиненных.

Если исходные данные разнятся, то почему время выполнение запроса должно быть одинаковым ?

Сообщение было отредактировано: 21 сен 09, 15:20
21 сен 09, 15:20    [7687699]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
Glory
Если исходные данные разнятся, то почему время выполнение запроса должно быть одинаковым ?

Думаю, дело в том, что запрос с top 10 выполняется долше, чем без top 10. То есть Пользователь 1 дан просто для примера корректной работы.
21 сен 09, 15:37    [7687801]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Piter Ivanoff
из-за чего теоретически может быть такое расхождение по выполнению?
Теоретически мало ли что, не глядя на запрос мне тяжело судить
Вот первое что мне приходит в голову
create table #t(dt datetime)
insert into #t(dt)
select cast('20090101' as datetime) as dt union all
select cast('20090201' as datetime) as dt union all
select cast('20090301' as datetime) as dt
go
-- first user
set dateformat ydm
select * from #t where dt < '2009/04/01'
go
-- second user
set dateformat ymd
select * from #t where dt < '2009/04/01'
go
drop table #t
go
21 сен 09, 15:42    [7687836]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
Piter Ivanoff
Guest
Не совсем понял проблему, которую выявляет данный пример. Проблема что выборка по датам происходит или что-то другое?
21 сен 09, 16:25    [7688082]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
проблема что при разных set (что для разных пользователей в принципе возможно)
один и тот же плохо написанный запрос на одних и тех же исходных данных
может выдать разные результаты
21 сен 09, 16:29    [7688117]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
Piter Ivanoff
Guest
Вижу теперь. Нет, все не так просто. Эх, если бы все дело было в разных настройках дат...)))
В том то и дело, что два "человека" запускают один и тот же запрос (план запроса одинаков до сотых) водной и той же среде, только один выбирает 10 строк из 40 за 10 секунд, а другой из 18000 за 1 секунду и у меня даже нет догадок от чего такое может быть в принципе. Блокировок в момент выполнения на таблицах никаких нет.
21 сен 09, 16:36    [7688165]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
А может Вам разрешается заменить в своем запросе секретную информацию на table1, field1 и т.п.
и все-таки показать его здесь
Аналогично с планами
21 сен 09, 16:39    [7688193]     Ответить | Цитировать Сообщить модератору
 Re: Помогите оптимизировать запрос  [new]
--__Александр__--
Member

Откуда:
Сообщений: 2631
А если попробовать вручную развернуть вьюху и запустить запрос.

ИМХО, угадавать в чем у вас проблема - не есть интересное занятие.
Или привидите планы, заменив названия таблиц и индексов, либо ......
21 сен 09, 16:41    [7688208]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить