Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.011 c
2-1140965218
Winni
2006-02-26 17:46
2006.03.12
физическое удаление записей в БД Paradox ( файлы *.mb) ?


2-1140958878
De
2006-02-26 16:01
2006.03.12
как элемент пречисления записать в строку?


3-1137255604
maxxa144
2006-01-14 19:20
2006.03.12
альтернатива array полям.


2-1140548935
Express
2006-02-21 22:08
2006.03.12
Canvas


2-1140362816
delphi-oracle
2006-02-19 18:26
2006.03.12
Как нажать не свою кнопку.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский