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

Вниз

Проблема скорости работы   Найти похожие ветки 

 
Taurus   (2007-12-17 22:26) [0]

Здравствуйте! Помогите,пожалуйста, решить следующую проблему.
Открывается 3 связанных компонента ADODataSet. Связь главный-подчиненный:
Таблица 1 -> Таблица 2 -> Таблица 3.
В таблице 1 порядка 7 тыс записей, в таблице 2 - 15 тыс, в таблице 3 - 150 тыс, т.е. база небольшая.
На форме соответственно 3 сетки, в которые и выводятся данные. Все идет нормально до тех пор, пока на таблицу 2 не накладывается дополнительное условие типа where God=:Gd, т.е. необходимо выводить записи текущего года. После этого система начинает жутко тормозить при перемещении записей в 1й сетке.
Курсор на клиенте.
Как исправить ситуацию?


 
sniknik ©   (2007-12-17 22:35) [1]

> Как исправить ситуацию?
это практически невозможно...
видиш ли для этого нужно исправить ошибку в 17й строке, но ты же ее никогда не покажешь (проверено практикой)...


 
Правильный_Вася   (2007-12-17 22:45) [2]

используй не Таблица 1 -> Таблица 2 -> Таблица 3, а наборы данных по запросам
запросы заодно в студию занеси


 
Taurus   (2007-12-18 09:13) [3]

Наборы данных и так по запросам:
1-й Датасет:
select KodP, KodPoint, KodRai from Point where KodRai>=:KR1 and KodRai<=:KR2
2-й ДатаСет:
select KodProb, KodP, DateOtb from Proba where KodPoint=:KodP and DateOtb>=:D1 and DateOtb<=:D2
3-й ДатаСет:
select * from Analiz where KodProb=:KodProb

DataSource 2-го и 3-го датасета настроены соответственно на источники данных 1-го и 2-го.
Тормоза появляются после задания параметров 2-го:
ADO_Proba.Parameters.ParamByName("D1").Value:=StrToDate("01.01.2005");
ADO_Proba.Parameters.ParamByName("D2").Value:=StrToDate("31.12.2005");

Если исключить эти параметры из запроса или отключить 3-й Датасет, скорость станосится нормальной.


 
Sergey13 ©   (2007-12-18 09:34) [4]

> [3] Taurus   (18.12.07 09:13)

Индекс на Proba по KodPoint и DateOtb есть?


 
Sergey13 ©   (2007-12-18 09:48) [5]

> [3] Taurus   (18.12.07 09:13)
> DataSource 2-го и 3-го датасета настроены соответственно
> на источники данных 1-го и 2-го.

Есть вариант сделать это руками по АфтерСкрол и с задержкой по таймеру (время подобрать эмпирически) для отсеивания быстрого прокручивания данных. Но за этим надо следить и отключать при, например, печати отчета по этой связке.


 
sniknik ©   (2007-12-18 10:52) [6]

> Индекс на Proba по KodPoint и DateOtb есть?
+
в каком месте задаются параметры -
> ADO_Proba.Parameters.ParamByName("D1").Value:=StrToDate("01.01.2005");
> ADO_Proba.Parameters.ParamByName("D2").Value:=StrToDate("31.12.2005");
?
что будет если их прописать разово в десигне? также медленно?

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


 
Sergey13 ©   (2007-12-18 11:25) [7]

> кстати индекс на DateOtb не так уж и важен

Поже на то.

> В таблице 1 порядка 7 тыс записей, в таблице 2 - 15 тыс, в таблице 3 - 150 тыс

т.е. на 1 запись в первой таблице приходится всего 2 записи во второй. В таком случае наличие/отсутствие индекса по 2 полям не должен бы вроде оказывать влияния.

А план выполнения в аксесе можно посмотреть?


 
sniknik ©   (2007-12-18 11:54) [8]

> А план выполнения в аксесе можно посмотреть?
если и можно то я не знаю как...

но вообще, план будет простой..., тут и так ясно, что с введением доп. параметров оно(мастер детайл) у него переключается с "запросного" механизма на открытие всей таблицы + общий фильтр. т.е. на манер типа как если ADOTable по мастер детайлу связать...
почему, и чем он этого добился х.з., но скорее всего так оно и есть.


 
Taurus   (2007-12-18 12:35) [9]


> что будет если их прописать разово в десигне? также медленно?

также.


> как насчет замены доп. параметров фильтром, меняется чтонибудь?

Фильтр на подчиненную таблицу не ставится.


 
sniknik ©   (2007-12-18 13:43) [10]

> также.
хреново...

> Фильтр на подчиненную таблицу не ставится.
вот вроде при варианте по запросам должен... а при втором (в [8]) варианте точно сам мастер детайл использует фильтр, поэтому и не ставиться...

выложи куданибудь тест прогу с базой. посмотреть.
базу (данные) если они секрет можеш "поковеркать", данные в полях не участвующих в связке вообще удалить (UPDATE ... SET xxx=NULL)
в тест (пустой проект) перенеси только то что участвует в связке.


 
Sergey13 ©   (2007-12-18 13:53) [11]

> [9] Taurus   (18.12.07 12:35)

А если все таки попробовать на "ручное управление" перевести по афтерскролу? Там делов то на 10 минут на попробовать.


 
Slym ©   (2007-12-19 10:50) [12]

Proba.KodPoint  - проиндексировать т.к. внешний ключ



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

Текущий архив: 2008.05.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
2-1209721673
graphoman
2008-05-02 13:47
2008.05.25
Файл справки


2-1209387942
switch
2008-04-28 17:05
2008.05.25
Графическое поле


15-1207895948
DimA
2008-04-11 10:39
2008.05.25
Проблема с кодировкой Quick Report


15-1208168919
Ломброзо
2008-04-14 14:28
2008.05.25
Медленная запись на флешку


2-1209008700
Foo Fighters
2008-04-24 07:45
2008.05.25
как в Adoquery сделать подстановку?