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

Откуда:
Сообщений: 22
Добрый день,

Есть один запрос: Если использовать оператор (select count(*) from ...) , то возращает
значение 54 625
за 3 секунды.

При попытке их вывести полностью запрос (select * from ...) виснет на ~10 минут.

С чем это может быть связано?

Любопытно, что при использовании TOP первый запрос вырабатывает также за 3 секунды, а без top 10 минут.

select  top 29000
c.*
from replica..credit c  
join Replica..employee e on e.id_emp=c.id_emp and  e.admintype='t'
left join  Bonuses..K_sap sap on sap.homercode = e.homercode  and  (c.date_ratif between sap.d1 and sap.d2 or sap.d1 is null)
join replica..product p on p.id=c.id_product and p.id_channel=1
join #date d on c.date_ratif  between d.d1 and d.d2
where
 c.status not in ('d','t','f')

select  c.*
from replica..credit c  
join Replica..employee e on e.id_emp=c.id_emp and  e.admintype='t'
left join  Bonuses..K_sap sap on sap.homercode = e.homercode  and  (c.date_ratif between sap.d1 and sap.d2 or sap.d1 is null)
join replica..product p on p.id=c.id_product and p.id_channel=1
join #date d on c.date_ratif  between d.d1 and d.d2
where
 c.status not in ('d','t','f')
16 окт 09, 20:56    [7799288]     Ответить | Цитировать Сообщить модератору
 Re: Время запроса в разы увеличивается.  [new]
iljy
Member

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

планы смотрите, там все написано.
16 окт 09, 21:01    [7799296]     Ответить | Цитировать Сообщить модератору
 Re: Время запроса в разы увеличивается.  [new]
удшщтантон
Member

Откуда:
Сообщений: 22
анализировал планы,

но явного ничего не нашел.
Прикладываю:

К сообщению приложен файл (Plan.rar - 7Kb) cкачать
16 окт 09, 21:05    [7799302]     Ответить | Цитировать Сообщить модератору
 Re: Время запроса в разы увеличивается.  [new]
iljy
Member

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

выложите не предпологаемые. а реальные планы. Очень хочется посмотреть на количество обрабатываемых строк. На первый взгляд отличается работа с таблицей emploee - сканирование вместо поиска по индексу. Добавьте к ней хинт with(index (nc_id_emp_employee))
16 окт 09, 21:28    [7799354]     Ответить | Цитировать Сообщить модератору
 Re: Время запроса в разы увеличивается.  [new]
dubok79
Member

Откуда: Владимирская обл.
Сообщений: 141
SELECT * FROM выполняет просто сканирование таблицы, поэтому и долго. Включение же TOP позволяет использовать индексы, а COUNT(*) просто считывает кол-во строк и так же скорее всего берет примари кей ИМХО!
17 окт 09, 11:47    [7800027]     Ответить | Цитировать Сообщить модератору
 Re: Время запроса в разы увеличивается.  [new]
iljy
Member

Откуда:
Сообщений: 8711
dubok79
SELECT * FROM выполняет просто сканирование таблицы, поэтому и долго. Включение же TOP позволяет использовать индексы, а COUNT(*) просто считывает кол-во строк и так же скорее всего берет примари кей ИМХО!


?? вообще-то TOP с использованием индексов ну никак не связано. Для count(*) обычно используется самый узкий из допустимых для запроса индексов. А для SELECT * в конечном итоге возьмется кластер (или куча если кластера нет). А TOP влияет на количество выбираемых записей, и если по статистике оптимизатор считает, что не использовать индексы выгоднее - он их не будет использовать.
17 окт 09, 12:17    [7800063]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить