Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Чрезмерно долгое выполнение запроса!! / 8 сообщений из 8, страница 1 из 1
04.10.2002, 17:37:52
    #32055608
Максим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чрезмерно долгое выполнение запроса!!
Всем привет!
Пожалуйста подскажите, в чем может быть причина, что запрос выполняется очень долго? Может быть ошибки в скрипте? Пожалуйста посмотрите запрос, разположенный ниже, и выскажите свое мнение и замечания!!


declare @dtimestart char(10),@s char(9), @e char(9)
set @dtimestart = (select convert(char(10), getdate(), 111))
set @s = ' 13:00:00'
set @e = ' 15:00:00'
select
cast(avg(paflt1) as decimal(6,1)),cast(avg(papipe1) as decimal(6,1)), cast(avg(pampmp4) as decimal(6,1)), cast(avg(paoutvlv1) as decimal(6,1)), cast(avg(panps1) as decimal(6,1)), cast(avg(pampmp1) as decimal(6,1)),
cast(avg(paoilinbrmpmp) as decimal(6,2)), cast(avg(tempfbrmpmp1) as decimal(6,1)), cast(avg(tempbbrmpmp1) as decimal(6,1)), cast(avg(tempcasempmp1) as decimal(6,1)),
cast(avg(tempfbrmmtr1) as decimal(6,1)), cast(avg(tempbbrmmtr1) as decimal(6,1)), cast(avg(tempcasemmtr1) as decimal(6,1)), cast(avg(tempwnd1mmtr1) as decimal(6,1)), cast(avg(tempwnd2mmtr1) as decimal(6,1)), cast(avg(tempwnd3mmtr1) as decimal(6,1)),
cast(avg(tempwnd4mmtr1) as decimal(6,1)), cast(avg(tempwnd5mmtr1) as decimal(6,1)), cast(avg(tempwnd6mmtr1) as decimal(6,1)), cast(avg(tempoilinbrmpmp) as decimal(6,1)), cast(avg(tempoiloutbrmpmp) as decimal(6,1)), cast(avg(vibhorfbrmpmp1) as decimal(6,1)),
cast(avg(vibhorbbrmpmp1) as decimal(6,1)), cast(avg(vibverfbrmpmp1) as decimal(6,1)), cast(avg(vibverbbrmpmp1) as decimal(6,1)), cast(avg(iammtr1) as decimal(6,0)), cast(avg(iaexcmmtr1) as decimal(6,0)), cast(avg(posvlvr61) as decimal(6,0)), cast(avg(posvlvr62) as decimal(6,0))
from analog
where dtime between @dtimestart+@s and @dtimestart+@e


Заранее благодарен!
...
Рейтинг: 0 / 0
04.10.2002, 18:36:14
    #32055617
Vit.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чрезмерно долгое выполнение запроса!!
конечно долго т.к. оптимизатор не использует индексы
и на кучу cast(<expr>) тратится масса времени
...
Рейтинг: 0 / 0
04.10.2002, 18:56:24
    #32055625
Максим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чрезмерно долгое выполнение запроса!!
Так какое решение проблемы, убрать cast-ы или что, из-за чего не изпользуются индексы?
...
Рейтинг: 0 / 0
04.10.2002, 19:33:53
    #32055634
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чрезмерно долгое выполнение запроса!!
Можно объяснить смысл кастов к decimal(6, 0)?

В WHERE убери сложение и считай его до выполнения запроса. Правильно, что DATEDIFF не используешь - оптимизатор запутался бы окончательно.
Убедись, что есть индекс по полю dtime.
...
Рейтинг: 0 / 0
04.10.2002, 19:50:26
    #32055637
Максим
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чрезмерно долгое выполнение запроса!!
Эти данные изпользуются для отчетов, в которых данные должны отображаться с определенной точностью, а в таблицу данные пишутся с 8 знаками после запятой.
Потому мне и приходится обрезать данные.
Если есть какие-либо идеи, как это можно сделать, то я буду очень признателен.
...
Рейтинг: 0 / 0
04.10.2002, 19:56:12
    #32055639
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чрезмерно долгое выполнение запроса!!
План выполнения запроса анализировали ?
...
Рейтинг: 0 / 0
04.10.2002, 20:31:18
    #32055649
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чрезмерно долгое выполнение запроса!!
Посмотри сюда, может поможет:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT CAST( 12345 . 12345678  AS DECIMAL( 6 , 0 )), CAST( 12345 . 12345678  AS INT)
                     
 -------- ----------- 
 
 12345      12345 

( 1  row(s) affected)

...
Рейтинг: 0 / 0
07.10.2002, 10:10:52
    #32055841
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чрезмерно долгое выполнение запроса!!
По моему проблема в условии.
Код: plaintext
where dtime between @dtimestart+@s and @dtimestart+@e

Если поле dtime имеет тип datetime, как будет интерпритирована эта конструкция? Как то не однозначно получается дата сравнивается со строкой!
Попробуйте переделать на
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
declare @dtimestart datetime,@s datetime, @e datetime 
set @dtimestart = convert(datetime,(varchar, getdate(),  1 ), 1 )
set @s = dateadd(hh, 13 ,@dtimestart)
set @e = dateadd(hh, 15 ,@dtimestart)
select
...
where dtime between @s and @e

Тогда возможно и индекс по dtime заработает.

Если же dtime - строка, то переделайте в дату.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Чрезмерно долгое выполнение запроса!! / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]