Форум: "Базы";
Текущий архив: 2008.05.25;
Скачать: [xml.tar.bz2];
ВнизПроблема скорости работы Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c