Текущий архив: 2007.01.14;
Скачать: CL | DM;
Вниз
Оптимизация при открытии окна Найти похожие ветки
← →
Константин_ (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;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.012 c