|
#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
|
|||
|
|||
Спасибо буду пробывать
|