Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Оптимизация при открытии окна [D7, 2000, XP]


Страницы:   1 2

Константин_ ©   (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.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо