Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Вниз

ADO + Access - ускорить надо!   Найти похожие ветки 

 
UnDISCOvery   (2005-09-08 18:57) [0]

Алоха! Есть у меня 2 вопроса по ускорению работы кода ...

Дано: БД Акцесс, 1 таблица, примерно 500 000 записей, размер 200 мегов. Доступ через ADOConnection + ADOQuery.

1. Как ускорить коннект к базе? После ADOConnection:= true долго думает и тормозит прогу...

2. Каким способом можно добиться того, чтобы ADOQuery.Open не тормозило основной поток? Какие настройки CursorLocation, ExecuteOption помогут?

3. Почему БД при занесении в нее записей так здорово пухнет? До гига бывает доходит,а после сжатия 200 мегов. Что такое делает это "сжатие"? И можно ли его сразу включить?


 
Desdechado ©   (2005-09-08 19:07) [1]

2. Не писать в Query SELECT * FROM tablica500tysch
3. Сжатие уменьшает файл за счет уничтожения неиспользуемых областей, которые остаются после удаления данных. Включить его нельзя. Это место потом автоматически используется для размещения новых данных без роста файла. Пухнуть может, если в БД пишешь картинки или музыку, или показатели датчиков ежесекундно


 
Anatoly Podgoretsky ©   (2005-09-08 19:12) [2]

2. Каким способом можно добиться того, чтобы ADOQuery.Open не тормозило основной поток? Какие настройки CursorLocation, ExecuteOption помогут?

CursorLocation ===
clUseServer если применимо к Акцесс

ExecuteOption ===
eoAsyncExecute The command is executed asynchronously.
eoAsyncFetch The command fetches remaining rows after the initial quantity specified in the Cache property asynchronously.
eoAsyncFetchNonBlocking Execution is performed without blocking the thread.


 
UnDISCOvery   (2005-09-08 19:46) [3]

2Desdechado:
-  А что же мне тогда писать в запросе для выборки данных как не SELECT * FROM? :) Но ход твоих мыслей мне понятен ... Я не пытаюсь выбрать единовременно все 500 тыщ, понятное дело, использую предикат WHERE (Field1=Value1) and (Field2=Value2) and ... выбирается максимум 600-800 строк,но все равно очень долго :( ... Каким образом мне нужно построить индексы чтобы ускорить это дело? На каждое используемое поле или один составной?
- В базе не хранятся картинки и музыка (полей BLOB нет), в ней лежит инфа о файлах на диске (описание, атрибуты, путь к файлу). Удаления данных пока не производилось (только запись) и все равно без сжатия было гиг, а после 200 мегов- странно как-то ... может это она под текстовое поле (путь к файлу) столько хавает? :-/

2Anatoly Podgoretsky
- А место курсора нужно указывать для Query или для Connection?
  или и там и там?
- Справку я, естественно предваритеьно прочитал :) но при ExecuteOption = [eoAsyncFetch,eoAsyncFetchNonBlocking], Cache= 20 нифига он не фетчит асинхронно 20 строчек, а качает все 600 синхронно.
Может быть обратить внимание на св-во MaxRecords&


 
AlexWlad ©   (2005-09-08 20:13) [4]

Для локальных БД CursorLocation игнорируется.
База (mdb) на этой-же машине?
Пользователь один или несколько?
Может стоит посмотреть в сторону MSDE или Embedded FireBird?


 
UnDISCOvery   (2005-09-08 20:41) [5]

2 AlexWlad
- база может быть и на удаленной машине
- несколько пользователей (порядка 3-5)

MSDE - громоздкий слишком для нашей задачи.
Про ФайрБэрд слышал, а вот про Embedded первый раз, что за зверь?


 
Anatoly Podgoretsky ©   (2005-09-08 22:33) [6]

UnDISCOvery   (08.09.05 20:41) [5]
Не более чем Акцесс.

UnDISCOvery   (08.09.05 19:46) [3]
Решил раньше Билла сделать новую файловую систему.

У тебя очень большой объем базы, а так как это файловая база, то с ней напрямую работает каждый клиент. Индексы могут немного снизить эатраты на просмотр всей базы. Но лучше подумать о сервере.


 
isasa ©   (2005-09-08 22:35) [7]

>SELECT * FROM? :) Но ход твоих мыслей мне понятен ... использую предикат WHERE ....
По-моему
Desdechado ©   (08.09.05 19:07) [1]
не совсем это имел ввиду

select field1, field1 from ....

только нужные поля. На скорость выборки это может сильно повлиять


 
Desdechado ©   (2005-09-08 22:46) [8]

я имел ввиду четкое указание списка полей и ограничений выборки
про FireBird читать здесь ibase.ru
Embedded - это однопользовательский вариант, для 3-5 пользователей не подойдет
Индексы полезны по полям, по которым идет выборка, объединение таблиц или сортировка. Индексная стратегия хорошо расписана на том же ibase.ru


 
Виталий Панасенко   (2005-09-09 09:40) [9]


> - А место курсора нужно указывать для Query или для Connection?

Для Query


 
UnDISCOvery   (2005-09-09 12:34) [10]

Anatoly Podgoretsky ©   (08.09.05 22:33) [6]
 Сравнение МСДЕ и Акцесса, по-моему, вообще некорректно :)
 В нашем случае у МСДЕ один большой минус - размер дистрибутива.

 Ваш сарказм принимаю, но все-таки лучше ставить смайлики.
 Какой для Акцесса нормальный объем?

Desdechado ©   (08.09.05 22:46) [8]
 Спасибо - почитаю

А все-таки - как ускорить процесс установления соединения АДО с БД Акцесс? Какие настройки на это могут влиять?


 
Виталий Панасенко   (2005-09-09 12:50) [11]


> А все-таки - как ускорить процесс установления соединения
> АДО с БД Акцесс? Какие настройки на это могут влиять?

ответы читаешь ?

> Anatoly Podgoretsky ©   (08.09.05 19:12) [2]
> 2. Каким способом можно добиться того, чтобы ADOQuery.Open
> не тормозило основной поток? Какие настройки CursorLocation,
> ExecuteOption помогут?
>
> CursorLocation ===
> clUseServer если применимо к Акцесс


> Виталий Панасенко   (09.09.05 09:40) [9]
>
> > - А место курсора нужно указывать для Query или для Connection?
>
> Для Query


 
UnDISCOvery   (2005-09-09 14:11) [12]

Ответы читаю, как же иначе ... А Вы вопросы?
Речь идет не о выборке, а о коннекте к самой БД.

"1. Как ускорить коннект к базе? После ADOConnection:= true долго думает и тормозит прогу..."

В ADOConnection нужно установить CursorLocation = clUseServer? Это ускорить процесс установления соединения?


 
Desdechado ©   (2005-09-09 16:36) [13]

Access - файл-сервер, скорее всего при коннекте что-то кэшируется на клиент по сети
при больших объемах БД кэш тоже может быть немаленький


 
Prohodil Mimo ©   (2005-09-10 14:40) [14]

Perehodi na FB, razmer distributiva - men"she ne pridumajesh :o)
i baza tak puhnut" ne budet i tormozov trudneje dostich.


 
AlexWlad ©   (2005-09-11 10:00) [15]

UnDISCOvery   (09.09.05 12:34) [10]

Дистрибутив MSDE - отдельная папка. Возьми диск с Оффисом и посмотри - там не так уж и много. Другое дело, если нужны EM,QA,Profiler... Тут придется брать диск с полным сервером и ставить оттуда.


 
Anatoly Podgoretsky ©   (2005-09-11 13:18) [16]

AlexWlad ©   (11.09.05 10:00) [15]
Не стоит брать дистрибутив из офиса, как правило устаревший, да еше вероятнее версии 7, а не 2000.
Для установки MSDE надо брать MSDE SP4 - это хоть и написано, что сервис пак, но на самом деле это законченый автономный дистрибутив.
Для разработки программы более подходит Personal Edition из-за наличия EM,QA,Profiler, в окончательной поставке они не нужны и запрещены к распространению конечному пользователю.
Инсталяция простая - или из командной строки, или через бат и ини файл, которые легко изготовить обычным или программным путем (для конечного пользователя).


 
AlexWlad ©   (2005-09-11 16:07) [17]

Anatoly Podgoretsky ©   (11.09.05 13:18) [16]

Да, в 2000 офисе - 7-й, в ХР - 8-й, так что найти можно. Думаю диски с офисами все-же более распространены, чем с MSSQL.


 
Anatoly Podgoretsky ©   (2005-09-11 17:28) [18]

Зачем диски, дистрибутив свободен для скачивания.



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

Форум: "Базы";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.043 c
4-1124416633
Kripton
2005-08-19 05:57
2005.10.23
Прозрачность в TglListBox (class(TCustomListBox))


1-1127933261
френк
2005-09-28 22:47
2005.10.23
Загрузка CPU определенным приложением


14-1127912124
_RusLAN
2005-09-28 16:55
2005.10.23
Справочник по SQL для FB


9-1118410468
grouzd[E]v
2005-06-10 17:34
2005.10.23
Как определить минимальное расстояние от точки до полигона


14-1128414251
ocean
2005-10-04 12:24
2005.10.23
Адамова экстрадировали в США





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