![]() |
|
|
#1
|
|||
|
|||
|
Код:
DataModule2.QueryPRG.SQL.Text:='SELECT convert(varchar(13), [SimpleTime], 120) + ''.00'' + ''.00'', '+ ' avg(Chann02), avg(Chann03), avg(Chann04), avg(Chann05), avg(Chann06), avg(Chann07) , avg(Chann08) '+ ' FROM RGBTEC2.dbo.Data_086508_8_8_8 '+ ' where SimpleTime between :Param1 and :Param2 '+ ' group by convert(varchar(13), [SimpleTime], 120) + ''.00'' + ''.00'''+ ' ORDER BY 1'; Может есть у кого какие мысли как можно ускорить выполнение этого запроса? В базе пока 2млн записей это за месяц. Время этого запроса примерно 23 секунды. |
|
#2
|
|||
|
|||
|
профайлинг есть у субд?
|
|
#3
|
|||
|
|||
|
1. Что такое SimpleTime. Убрать из расчетов и коныертировать только по результату выборки
2. Индекс на SimpleTime, если отбирается не более 5% записей за раз. Иначе - нидекс убрать. 3. Ну и глянуть план запроса. |
|
#4
|
|||
|
|||
|
Что такое профайлинг я чесно говоря не знаю.
1.SimpleTime - поле содержащие дату/время. Основываясь на него все считается. 2. Индекса у поля нет. Поясняю запрос если врдуг не понятно. Выбирается промежуток времени из этого промежутка берется среднее за час и выводится. |
|
#5
|
|||
|
|||
|
И еще постоянно вылетает ошибка при этом запросе Время ожидания истекло. Раз сто тыкнишь на выполнение запроса он сработает. Что то может можно с этим сделать?
|
|
#6
|
||||
|
||||
|
Цитата:
|
|
#7
|
|||
|
|||
|
Что то я не понимаю как вы предлагаите сделать?
|
|
#8
|
|||
|
|||
|
Предлагают не делать конвертацию в GROUP BY.
Да и ыообще, может имеет смысл делать конвертацию во внешнем селекте, а во внутреннем просто получать нужные данные. В конце концов, можно сделать материалайзед вью со всеми нужными группировками, а потом просто из нее делать выборку. Ну тут вопрос когда это вью обновлять. |
|
#9
|
|||
|
|||
|
Спасибо буду пробывать
|