powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Чрезмерно долгое выполнение запроса!!
8 сообщений из 8, страница 1 из 1
Чрезмерно долгое выполнение запроса!!
    #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
Чрезмерно долгое выполнение запроса!!
    #32055617
Vit.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
конечно долго т.к. оптимизатор не использует индексы
и на кучу cast(<expr>) тратится масса времени
...
Рейтинг: 0 / 0
Чрезмерно долгое выполнение запроса!!
    #32055625
Максим
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так какое решение проблемы, убрать cast-ы или что, из-за чего не изпользуются индексы?
...
Рейтинг: 0 / 0
Чрезмерно долгое выполнение запроса!!
    #32055634
Фотография Gobzo Kobler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно объяснить смысл кастов к decimal(6, 0)?

В WHERE убери сложение и считай его до выполнения запроса. Правильно, что DATEDIFF не используешь - оптимизатор запутался бы окончательно.
Убедись, что есть индекс по полю dtime.
...
Рейтинг: 0 / 0
Чрезмерно долгое выполнение запроса!!
    #32055637
Максим
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эти данные изпользуются для отчетов, в которых данные должны отображаться с определенной точностью, а в таблицу данные пишутся с 8 знаками после запятой.
Потому мне и приходится обрезать данные.
Если есть какие-либо идеи, как это можно сделать, то я буду очень признателен.
...
Рейтинг: 0 / 0
Чрезмерно долгое выполнение запроса!!
    #32055639
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
План выполнения запроса анализировали ?
...
Рейтинг: 0 / 0
Чрезмерно долгое выполнение запроса!!
    #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
Чрезмерно долгое выполнение запроса!!
    #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
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Чрезмерно долгое выполнение запроса!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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