![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оптимизация при открытии окна [D7, 2000, XP]
Константин_ © (2006-12-26 09:36:00)Ситуация следующая в обрабочике события формы OnShow прописана процедура выполняющая несколько sql запросов... и при открытии формы ощущаются страшные тормоза, как можно оптимизировать код в данной ситуации?
И еще вопрос если выносить исполнение sql запросов в отдельный процесс, то как это сделать?
Спасибо.
evvcom (2006-12-26 11:46:00) [1]> [31] Константин_ (26.12.06 11:33)
> насколько я теряю в скорости без этого?
В твоем случае скорее всего немного. Но...
1. Используя статическое определение запроса, ты меньше путаешься в тексте, так как он становится наглядным.
2. Протестировать "скорость" выполнения запроса ты можешь уже в дизайн-тайм и именно этого запроса, а не в купе со всеми другими, явно или неявно выполняющимися.
3. Легче понять твой запрос и нам, так как видим именно запрос, не обремененный лишними апострофами и прочей ерундой, а не смесь мух и котлет.
4. И прочее.
Константин_ (2006-12-26 11:45:00) [2]он такойже простой, но индекс стоял по одному полю, сейчас поменял - улучшение на лицо.
qVodomer_p.Close;
qVodomer_p.SQL.Clear;
qVodomer_p.SQL.Add('select *');
qVodomer_p.SQL.Add('from '''+DbfPath+'Vodomer_p.dbf''');
qVodomer_p.SQL.Add('where kod='''+qVodomer.Fields[0].AsString+''' and kodv='''+qVodomer.Fields[1].AsString+'''');
qVodomer_p.Open;
Ребята спасибо за помощь, иначе бы про индексы и не вспомнил.
Еще раз спасибо.
ЮЮ (2006-12-26 11:39:00) [3]1, 3 дают выигрыш при многократнов выполнении запроса в цикле, тем более на сервере. Здесь же - выигрыш небольшой.
2. Всегда использую TDataBase и затем простые имена таблиц, т.е.from Akt
мне кажется я нашел где копать, впри открытии из одного из запросов, автоматом выполняется связанный с ним другой...
Одним запросом больше - и такие тормоза? Тогда тот запрос давай на свет. Или он такой же простой?
Константин_ (2006-12-26 11:33:00) [4]на таблице есть несколько индексов, в том числе и код...
мне кажется я нашел где копать, впри открытии из одного из запросов, автоматом выполняется связанный с ним другой...
> evvcom © (26.12.06 11:15) [28]
>
> > [23] Константин_ (26.12.06 11:00)
>
> 1. Убери динамическое создание SQL.
> 2. Заведи алиас, чтобы убрать 'from '''+DbfPath+'Akt.dbf'''
> 3. Используй параметры.
>
насколько я теряю в скорости без этого?
oxffff (2006-12-26 11:18:00) [5]
> Sergey13 © (26.12.06 11:12) [27]
> > [24] Константин_ (26.12.06 11:04)
>
> Если есть индекс, то возможно это он закачивается на клиента.
>
Видимо DbfPath до шары.
Вот и затраты на redirect + работа по сети + нет индекса.
ЮЮ (2006-12-26 11:17:00) [6]
> Если есть индекс, то возможно это он закачивается на клиента.
Зачем БДЕ при выполнении запроса закачивать индекс таблицы на клиента?
evvcom (2006-12-26 11:15:00) [7]> [23] Константин_ (26.12.06 11:00)
1. Убери динамическое создание SQL.
2. Заведи алиас, чтобы убрать 'from '''+ DbfPath+'Akt.dbf'''
3. Используй параметры.
Ну а вопросы тебе уже задали.
Sergey13 (2006-12-26 11:12:00) [8]> [24] Константин_ (26.12.06 11:04)
Если есть индекс, то возможно это он закачивается на клиента.
oxffff (2006-12-26 11:07:00) [9]
> вот этот запрсо работает с табл 60 тыс записей, он и тормозит
ОГО. Akt.dbf
Индексация по kod произведена?
ЮЮ (2006-12-26 11:04:00) [10]Так это же поиск по текстовому полю, по которому, наверняка, и индекса нет, а говорил по Id-ам
Константин_ (2006-12-26 11:04:00) [11]2 Sergey13 Да, но меньше
Константин_ (2006-12-26 11:00:00) [12]
qAkt.SQL.Clear;
qAkt.SQL.Append('select kod,dogovor,ndogovor,suma,sumall,sumnds,tarifname,date1,date2,p1,p2,dateedit,dat ebuh,kl,akt,dateakt,kubf,kudedit');
qAkt.SQL.Append('from '''+DbfPath+'Akt.dbf''');
qAkt.SQL.Append('where kod='''+DM.TablePredKOD.AsString+'''');
qAkt.Open;
вот этот запрсо работает с табл 60 тыс записей, он и тормозит
Sergey13 (2006-12-26 10:39:00) [13]> [18] Константин_ (26.12.06 10:35)
1. Дело твое. Но без перехода проблемы эти будут нарастать.
2. После первого показа формы, если перезапросить в енй инфу, тормоза остаются или нет?
oxffff (2006-12-26 10:37:00) [14]
> ЮЮ © (26.12.06 10:26) [14]
>
> > Две таблиц по 60 тыс записей, остальные в районе 5 тыс.
>
>
>
> И всё тащишь на клиента? См [11].
Если канал слабый здесь поможет пре-Fetch по 30-50 записей.
Константин_ (2006-12-26 10:35:00) [15]Удалено модератором
evvcom (2006-12-26 10:35:00) [16]> [16] Константин_ (26.12.06 10:29)
3 запроса с итогом <100 записей? Это что-то с sql-ем у тебя. Скорее всего в нем лажа какая-то.
ЮЮ (2006-12-26 10:35:00) [17]
> Нет идет выборка из одной таблици по ID получается около
> 30 - 40 записей, впорой запрос из табл. с 5 тыс - на выходе
> до 10, третий из табл 5-10 тыс. на выходе 20-30 записей.
>
Тогда непонятно, откуда такие тормоза. Наверное в глубинах ДатаМодуля где-то завалялся TTable со времен сотворения проекта. На каком запросе самые большие тормоза? Тащи сюда - на оптимизацию :)
oxffff (2006-12-26 10:30:00) [18]
> Константин_ (26.12.06 10:01) [6]
> Sergey13 с радостью бы, но не могу ((
>
> 2 oxffff старшии должни заслуживать уважения, а не страдать
> фигней...
Ого. Страдаешь то ты. Причем сам от себя
Константин_ (2006-12-26 10:29:00) [19]Нет идет выборка из одной таблици по ID получается около 30 - 40 записей, впорой запрос из табл. с 5 тыс - на выходе до 10, третий из табл 5-10 тыс. на выходе 20-30 записей.
Sergey13 (2006-12-26 10:29:00) [20]> [12] Константин_ (26.12.06 10:22)
Программу лопатить придется. Но не так уж и сильно, раз все равно на запросах работаешь. Кроме того сделав 1 раз нормально избавишь себя от подобных проблем в будущем - тоже экономия.
Выделенный сервак? А сейчас где лежит? Того где лежит 100% хватит на сервер БД. Сервера есть и бесплатные и очень неплохие, например FireBird.