Форум: "Базы";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
ВнизСкорость работы с бд Найти похожие ветки
← →
SarDoX (2006-01-13 15:22) [0]программа активно работает с бд(аксесс) через адо.(очень много мелких запросов)
и, разумеется, через квери и sql запросы.
можно ли ускорить работу(даже если придется переходить на другие компоненты и, что не очень желательно(но если прирост при переходе с аксесс на *** будет существенен), на другую бд..
← →
Johnmen © (2006-01-13 15:31) [1]1. Оптимизировать запросы.
2. Оптимизировать логику работы приложения.
3. Перейти на др. БД с использованием др.компонентов доступа.
← →
sniknik © (2006-01-13 15:33) [2]Johnmen © (13.01.06 15:31) [1]
...
3. Перейти на др. БД с использованием др.компонентов доступа.
3.1. Оптимизировать запросы.
3.2. Оптимизировать логику работы приложения.
иначе смысла нет.
← →
SarDoX (2006-01-13 15:34) [3]1) т.е??
2)пытаюсь...
3)на которые именно и какой прирост получу(запросов много, но они буквально на 1-10 симвлолв)
← →
SarDoX (2006-01-13 15:37) [4]опишу работу проги(суть отразит, но в проге не так..)
создается строка
проверка в бд - существует ли такая строка.
если сущ - то идет добавление этой строки и создается пометка, что строка существует.
могу привести код sql запросов, но сомневаюсь, что кто то подскажет, как оптимизировать
← →
Johnmen © (2006-01-13 15:39) [5]>3)на которые именно и какой прирост получу(запросов много, но они буквально на 1-10 симвлолв)
Прирост будет в 0.09 - 999 раз
← →
Johnmen © (2006-01-13 15:42) [6]Что такое
"строка", "бд", "существует", "добавление", "пометка"
>могу привести код sql запросов, но сомневаюсь, что кто то подскажет, как оптимизировать
Сомневаешься - не приводи.
← →
SarDoX (2006-01-13 15:43) [7]гм..мутно так пишете.. просто что б перейти на другую бд и компоненты, мароки будет много(конверт бд, да и я знаю, как работать тока с ado)..
хочется знать, стоит ли оно того..?
← →
sniknik © (2006-01-13 15:47) [8]> но они буквально на 1-10 симвлолв
это из разряда чудес (8-е чудо света? ;). запроса в 1 символ не бывает! (если только вызов процедуры сименем 1 символ... да и то EXEC неявно добавляется... в общем сомнительно все это)
> гм..мутно так пишете..
так вопрос такой... мутный. других ответов не жди.
← →
Johnmen © (2006-01-13 15:48) [9]Не-е-е.. Это ты мутно вопросы задаёшь...:)
← →
SarDoX (2006-01-13 15:52) [10]ну, например, кусочек кода, место, которе может подтормаживать ход программы
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("SELECT * FROM table1 where id="+inttostr(kol+1)+"");
ADOQuery1.open;
tr:=ADOQuery1.Fields[d].asstring;
...
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("SELECT * FROM table1 where id="+inttostr(kol+2)+"");
ADOQuery1.open;
tr:=ADOQuery1.Fields[d].asstring;
последующий код будет выполняться, если в ячейке id= inttostr(kol+1) и в ячейке id= inttostr(kol+2 ) содержатся единицы. ведь можно объединить это в один запрос?
п.с. если единица тока в одной из ячеек, то доолжен быть выход из процедуры(на всяк случай, мож понадобится..)
← →
sniknik © (2006-01-13 15:55) [11]> ну, например, кусочек кода, место, которе может подтормаживать ход программы
если все такоеже, то программа наверное жутко тормозит... (обенно если это часть кусок из цикла)
← →
SarDoX (2006-01-13 15:59) [12]ну в цикле, выполняется примерно 20-36 раз.
криво...
научите, поправьте, пож-та
← →
SarDoX (2006-01-13 16:01) [13]sniknik
я имел ввиду, что из бд берется всего лишь 1 символ в одной части программы(либо 0,либо 1)
в другой части проги уже из бд берутся строки по 20-30 символов.
← →
sniknik © (2006-01-13 16:07) [14]> научите, поправьте, пож-та
оптимизация не делается "в общем"
вот конкретно только для того, что приведено (не более!!!). должно работать быстрее (внесение запроса обязательно к вынесению за цикл, перед изменением параметров закрывать датасет).with ADODataSet do begin
CommadText:= "SELECT d FROM table1 where id=:id1 or id=(:id2)";
Parameters[0].Value:= kol+1;
Parameters[1].Value:= kol+2;
open;
tr:= Fields[0].asstring;
...
Next;
tr:= Fields[0].asstring;
end;
← →
SarDoX (2006-01-13 16:18) [15]пояснение небольшое.
опять же лишь суть...
мне надо проверить, свободен ли человек в понедельник и во вторник
table1 - таблица с днями недели
id - собственно дни
если чел свободен - то стоит в ячейке 0, если занят, то 1
я делал так.
проверяю, свободен ли в понед.
если нет, то exit
если да, то проверяю, свободен ли во вторник
если нет, то exit
если да, то идет дальше выполнение кода
щас надо ускорить
← →
sniknik © (2006-01-13 16:37) [16]> пояснение небольшое.
так с небольшими пояснениями постепенно дойдем до нормальных... (если не надоест раньше)
> id - собственно дни
ключевое поле?
"оптимизация" с учетом новых сведений...with ADODataSet do begin
CommadText:= "SELECT Max(d) FROM table1 where id=1 or id=2"; //пон/вт. неизменные дни судя по описанию
Open;
if Fields[0].AsInteger > 0 then Exit;
end;
← →
Anatoly Podgoretsky © (2006-01-13 16:41) [17]Параметры для начала, затем смотреть индексы. Все должно летать.
← →
SarDoX (2006-01-13 16:50) [18]раз уж на то пошло... скажу как есть(уже уточнений не потребуется)
хотя программа не про это, но суть теперь на 100% такая же :)
есть неделя.
таблица(table) :
горизонталь - понед - суббота
вертикаль(id(от 1 до 4)) - утро/ обед/вечер/ночь
. мне надо определить, свободен ли чел в течение двух частичек дня.
т.е.
надо, например, уехать из города в понед.
требуется утро и обед.
надо проверять свободен ли он утром, свободен ли в обед.
если положительно и первое(т.е в ячейке понед,id=1), и второе(т.е в ячейке понед,id=2), то он модет ехать и код выполняется.
надеюсь, хватит терпения написать.
в след раз буду писать сразу же как есть, что б избежать таких моих "тупостей"
← →
баклан (2006-01-13 17:02) [19]Anatoly Podgoretsky © (13.01.06 16:41) [17]
хм... с параметрами запрос сработает быстрее чем непосредственное указание величин (как у товарища его IntToStr(Kol+1) в тексте самого запроса?
← →
jack128 © (2006-01-13 23:48) [20]баклан (13.01.06 17:02) [19]
хм... с параметрами запрос сработает быстрее чем непосредственное указание величин (как у товарища его IntToStr(Kol+1) в тексте самого запроса?
запрос выполняется в цикле десятки раз, так что - да. С параметрами быстрее. нет лишних prepare запроса.
SarDoX (13.01.06 16:50) [18]
это.. А у тебя что, на каждого человека по отдельной таблице чтоли??
А вообще табличку из 7 полей и 4 записей нужно полностью вытянуть на клиента и уже тут анализировать, а не париться над SQL запросами.
← →
SarDoX (2006-01-14 04:51) [21]jack128
нет
не получится
т.к таких таблиц 20-30(считай человек 23-30)
и проверяются все они Не по очереди, а рандамом...
хотя работать будет, но сомневаюсь, что это ускорит работу
← →
sniknik © (2006-01-14 09:32) [22]> т.к таких таблиц 20-30(считай человек 23-30)
еще один путь к оптимизации нормализовать базу. так все твои 20-30 таблиц надо обьеденять в одну, добавив поле признак "человек". выборки с условиями по индексированным полям будут не дольше чем из мелких таблиц а на пересоставлениях запросов время сэкономиш (разово составить запрос прямо в дизайн тайм, различные люди/их свобода несвобода будут получатся сменой значений параметров).
> но сомневаюсь, что это ускорит работу
а ты не сомневайся, ты пробуй. - есть 2 варианта, реализуй оба и проверь время выполнения, если время практически одинаково (неотлавливается разница) вставляй эти действия в длительный цикл, и смотри еще. и так всегда и во всем...
← →
jack128 © (2006-01-15 02:57) [23]SarDoX (14.01.06 4:51) [21]
т.к таких таблиц 20-30
Где? Вот цитата:
SarDoX (13.01.06 15:52) [10]
ну, например, кусочек кода, место, которе может подтормаживать ход программы
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("SELECT * FROM table1 where id="+inttostr(kol+1)+"");
ADOQuery1.open;
tr:=ADOQuery1.Fields[d].asstring;
...
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("SELECT * FROM table1 where id="+inttostr(kol+2)+"");
ADOQuery1.open;
tr:=ADOQuery1.Fields[d].asstring;
SarDoX (13.01.06 15:59) [12]
ну в цикле, выполняется примерно 20-36 раз.
криво...
научите, поправьте, пож-та
где здесь 30 разных таблиц?
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.015 c