Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.12;
Скачать: CL | DM;

Вниз

Скорость работы с бд   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.047 c
1-1138743883
DillerXX
2006-02-01 00:44
2006.03.12
Можно ли линковать .lib файлы к проекту?


3-1137925525
Malign
2006-01-22 13:25
2006.03.12
Обращение к таблице из другой (не текущей) БД в IB и FB.


15-1139922163
Styx_
2006-02-14 16:02
2006.03.12
Вот кому Борланд продал Delphi :)


15-1140440306
tytus
2006-02-20 15:58
2006.03.12
Как в екселе писать дату как текст?


15-1140446817
ArtemESC
2006-02-20 17:46
2006.03.12
Смена текстового видеорежима