Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
2-1208965349
smartleds
2008-04-23 19:42
2008.05.25
Подскажит плз, как при нажатии на кнопку произвести закрытие


8-1159089398
Brandik
2006-09-24 13:16
2008.05.25
Криво отображается BMP в форме.


15-1207821509
arhis
2008-04-10 13:58
2008.05.25
Зарядка для программиста


2-1209108268
worldmen
2008-04-25 11:24
2008.05.25
Открыть файл в RichEdit только для чтения


2-1209552738
корелаб
2008-04-30 14:52
2008.05.25
FB embedded и чарсет





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