Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];

Вниз

Оптимизация при открытии окна   Найти похожие ветки 

 
Константин_   (2006-12-26 09:36) [0]

Ситуация следующая в обрабочике события формы OnShow прописана процедура выполняющая несколько sql запросов... и при открытии формы ощущаются страшные тормоза, как можно оптимизировать код в данной ситуации?
И еще вопрос если выносить исполнение sql запросов в отдельный процесс, то как это сделать?
Спасибо.


 
oxffff ©   (2006-12-26 09:44) [1]


> открытии формы ощущаются страшные тормоза,


Да ты что. Что же это могло бы быть?


> выносить исполнение sql запросов в отдельный процесс,


Лучше сразу на другой компьютер.


 
Sergey13 ©   (2006-12-26 09:47) [2]

> прописана процедура выполняющая несколько sql запросов

Например можно попробовать их оптимизировать.


 
Константин_   (2006-12-26 09:53) [3]

Удалено модератором
Примечание: Просьба выполнена, ни он вякать не будет, но и ты тоже.


 
Sergey13 ©   (2006-12-26 09:55) [4]

> [3] Константин_   (26.12.06 09:53)

Тогда тебе не OnShow надо оптимизировать, а задуматься о переходе на SQL-сервер.


 
oxffff ©   (2006-12-26 09:57) [5]


> 2 oxffff не знаешь чем помочь, сиди и не вякай...


Тебе уже не помочь.
Один твой "вынести в отдельный процесс" чего стоит.

А вообще к старшим относится стоит с уважением.


 
Константин_   (2006-12-26 10:01) [6]

Удалено модератором
Примечание: Заработает ReadOnly, вот только до конца дочитаю


 
evvcom ©   (2006-12-26 10:02) [7]

> [3] Константин_   (26.12.06 09:53)
> не знаешь чем помочь, сиди и не вякай...

Полегче, а то можно write only заработать :)))

> [5] oxffff ©   (26.12.06 09:57)
> Один твой "вынести в отдельный процесс" чего стоит.

Эт точно (с) Сухов

А есть смысл выполнять кучу запросов именно в OnShow? Они все показываются на данной форме?


 
Константин_   (2006-12-26 10:10) [8]

evvcom да, они отображаются в нескольких DBGrid на данной форме... пробовал открытать их в той процедуре в которой открывается форма, ситуация таже - тормозит


 
ЮЮ ©   (2006-12-26 10:12) [9]

Если ты их вынесешь куда-то, быстрей они выполняться не будут. Пока они не ывыполнились, аользователю твоя программа нафиг не нужна. Значем ему бесполезная форма. Выполняй их на Create, а пользователю покажи красивую Splash форму, пусть любуется.


 
Sergey13 ©   (2006-12-26 10:13) [10]

> [8] Константин_   (26.12.06 10:10)

Почему сервера под запретом? Много ли данных в БД?


 
ЮЮ ©   (2006-12-26 10:15) [11]


> да, они отображаются в нескольких DBGrid на данной форме


1) Избавься от TTable
2) Пусть пользователь сначала введет критерии отбора данных, а затем выполняется запрос. Хочет всю таблицу - пусть потом ждет. Выберет десяток-другой - получит быстро.


 
Константин_   (2006-12-26 10:22) [12]

Две таблиц по 60 тыс записей, остальные в районе 5 тыс.
Если переходить на сервер, всю программу надобудет перелопачивать, да и возможности нет ставить выделеный сервак под эту программу + лицензию ни кто не купит. короче затратить они готовы 0 руб. а получить хотят все...


 
Константин_   (2006-12-26 10:25) [13]

2 ЮЮ у меня TQuery ... а если не получиться с оптимизацией то так и сделаю - Splash


 
ЮЮ ©   (2006-12-26 10:26) [14]


> Две таблиц по 60 тыс записей, остальные в районе 5 тыс.


И всё тащишь на клиента? См [11].


 
Sergey13 ©   (2006-12-26 10:29) [15]

> [12] Константин_   (26.12.06 10:22)

Программу лопатить придется. Но не так уж и сильно, раз все равно на запросах работаешь. Кроме того сделав 1 раз нормально избавишь себя от подобных проблем в будущем - тоже экономия.
Выделенный сервак? А сейчас где лежит? Того где лежит 100% хватит на сервер БД. Сервера есть и бесплатные и очень неплохие, например FireBird.


 
Константин_   (2006-12-26 10:29) [16]

Нет идет выборка из одной таблици по ID получается около 30 - 40 записей, впорой запрос из табл. с 5 тыс - на выходе до 10, третий из табл 5-10 тыс. на выходе 20-30 записей.


 
oxffff ©   (2006-12-26 10:30) [17]


> Константин_   (26.12.06 10:01) [6]
> Sergey13 с радостью бы, но не могу ((
>
> 2 oxffff старшии должни заслуживать уважения, а не страдать
> фигней...


Ого. Страдаешь то ты. Причем сам от себя


 
Константин_   (2006-12-26 10:35) [18]

Удалено модератором


 
ЮЮ ©   (2006-12-26 10:35) [19]


> Нет идет выборка из одной таблици по ID получается около
> 30 - 40 записей, впорой запрос из табл. с 5 тыс - на выходе
> до 10, третий из табл 5-10 тыс. на выходе 20-30 записей.
>


Тогда непонятно, откуда такие тормоза. Наверное в глубинах ДатаМодуля где-то завалялся TTable со времен сотворения проекта. На каком запросе самые большие тормоза? Тащи сюда - на оптимизацию :)


 
evvcom ©   (2006-12-26 10:35) [20]

> [16] Константин_   (26.12.06 10:29)

3 запроса с итогом <100 записей? Это что-то с sql-ем у тебя. Скорее всего в нем лажа какая-то.


 
oxffff ©   (2006-12-26 10:37) [21]


> ЮЮ ©   (26.12.06 10:26) [14]
>
> > Две таблиц по 60 тыс записей, остальные в районе 5 тыс.
>  
>
>
> И всё тащишь на клиента? См [11].


Если канал слабый здесь поможет пре-Fetch по 30-50 записей.


 
Sergey13 ©   (2006-12-26 10:39) [22]

> [18] Константин_   (26.12.06 10:35)

1. Дело твое. Но без перехода проблемы эти будут нарастать.

2. После первого показа формы, если перезапросить в енй инфу, тормоза остаются или нет?


 
Константин_   (2006-12-26 11:00) [23]


 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 тыс записей, он и тормозит


 
Константин_   (2006-12-26 11:04) [24]

2 Sergey13 Да, но меньше


 
ЮЮ ©   (2006-12-26 11:04) [25]

Так это же поиск по текстовому полю, по которому, наверняка, и индекса нет, а говорил по Id-ам


 
oxffff ©   (2006-12-26 11:07) [26]


> вот этот запрсо работает с табл 60 тыс записей, он и тормозит


ОГО. Akt.dbf
Индексация по kod произведена?


 
Sergey13 ©   (2006-12-26 11:12) [27]

> [24] Константин_   (26.12.06 11:04)

Если есть индекс, то возможно это он закачивается на клиента.


 
evvcom ©   (2006-12-26 11:15) [28]

> [23] Константин_   (26.12.06 11:00)

1. Убери динамическое создание SQL.
2. Заведи алиас, чтобы убрать "from """+DbfPath+"Akt.dbf"""
3. Используй параметры.

Ну а вопросы тебе уже задали.


 
ЮЮ ©   (2006-12-26 11:17) [29]


> Если есть индекс, то возможно это он закачивается на клиента.


Зачем БДЕ при выполнении запроса закачивать индекс таблицы на клиента?


 
oxffff ©   (2006-12-26 11:18) [30]


> Sergey13 ©   (26.12.06 11:12) [27]
> > [24] Константин_   (26.12.06 11:04)
>
> Если есть индекс, то возможно это он закачивается на клиента.
>


Видимо DbfPath до шары.
Вот и затраты на redirect + работа по сети + нет индекса.


 
Константин_   (2006-12-26 11:33) [31]

на таблице есть несколько индексов, в том числе и код...
мне кажется я нашел где копать, впри открытии из одного из запросов, автоматом  выполняется связанный с ним другой...

> evvcom ©   (26.12.06 11:15) [28]
>
> > [23] Константин_   (26.12.06 11:00)
>
> 1. Убери динамическое создание SQL.
> 2. Заведи алиас, чтобы убрать "from """+DbfPath+"Akt.dbf"""
> 3. Используй параметры.
>

насколько я теряю в скорости без этого?


 
ЮЮ ©   (2006-12-26 11:39) [32]

1, 3 дают выигрыш при многократнов выполнении запроса в цикле, тем более на сервере. Здесь же - выигрыш небольшой.
2. Всегда использую TDataBase и затем простые имена таблиц, т.е. from Akt

мне кажется я нашел где копать, впри открытии из одного из запросов, автоматом  выполняется связанный с ним другой...

Одним запросом больше - и такие тормоза? Тогда тот запрос давай на свет. Или он такой же простой?


 
Константин_   (2006-12-26 11:45) [33]

он такойже простой, но индекс стоял по одному полю, сейчас поменял - улучшение на лицо.
 
 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;

Ребята спасибо за помощь, иначе бы про индексы и не вспомнил.
Еще раз спасибо.


 
evvcom ©   (2006-12-26 11:46) [34]

> [31] Константин_   (26.12.06 11:33)
> насколько я теряю в скорости без этого?

В твоем случае скорее всего немного. Но...
1. Используя статическое определение запроса, ты меньше путаешься в тексте, так как он становится наглядным.
2. Протестировать "скорость" выполнения запроса ты можешь уже в дизайн-тайм и именно этого запроса, а не в купе со всеми другими, явно или неявно выполняющимися.
3. Легче понять твой запрос и нам, так как видим именно запрос, не обремененный лишними апострофами и прочей ерундой, а не смесь мух и котлет.
4. И прочее.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.014 c
2-1167004641
Святослав
2006-12-25 02:57
2007.01.14
mdb файлы в Delphi


3-1161776236
Megabyte
2006-10-25 15:37
2007.01.14
Не активизируется кнопка Post у DBNavigator при удалении


15-1166630469
SteepeWolf
2006-12-20 19:01
2007.01.14
Посоветуйте книгу для начинающего пользователя ПК.


15-1167118313
pavel_guzhanov
2006-12-26 10:31
2007.01.14
Чем можно просмотреть файлы с расширением .fpt?


2-1166906589
FIL-23
2006-12-23 23:43
2007.01.14
компонент для вставки рисунку в текст





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский