ADO + Access - прискорити треба!
Алоха! Є у мене 2 питання щодо прискорення роботи коду.
Дано: БД Акцесс, 1 таблиця, приблизно 500 000 записів, розмір 200 мегов. Доступ через ADOConnection + ADOQuery.
1. Як прискорити коннект до бази? Після ADOConnection: = true довго думає і гальмує прогу.
2. Яким способом можна домогтися того, щоб ADOQuery.Open не гальмує основний потік? Які настройки CursorLocation, ExecuteOption допоможуть?
3. Чому БД при занесенні в неї записів так здорово пухне? До гіга буває доходить, а після стиснення 200 мегов. Що таке робить це "стиснення"? І чи можна його відразу включити?
2. Не писати в Query SELECT * FROM tablica500tysch
3. Стиснення зменшує файл за рахунок знищення невикористовуваних областей, які залишаються після видалення даних. Включити його можна. Це місце потім автоматично використовується для розміщення нових даних без зростання файлу. Пухнути може, якщо в БД пишеш картинки або музику, або показники датчиків щомиті
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.
2Desdechado:
- # XA0; А що ж мені тоді писати в запиті для вибірки даних що не SELECT * FROM. ) Але хід твоїх думок мені зрозумілий. Я не намагаюся вибрати одноразово всі 500 тисяч, ясна річ, використовую предикат WHERE (Field1 = Value1) and (Field2 = Value2) and. вибирається максимум 600-800 рядків, але все одно дуже довго :(. Яким чином мені потрібно побудувати індекси щоб прискорити цю справу? На кожне використовується поле або один складовою?
- В основі не зберігаються картинки і музика (полів BLOB немає), в ній лежить інфа про файлах на диску (опис, атрибути, шлях до файлу). Видалення даних поки не проводилося (тільки запис) і все одно без стиснення було гіг, а після 200 мегов- дивно якось. може це вона під текстове поле (шлях до файлу) стільки хаває. - /
2Anatoly Podgoretsky
- А місце курсору потрібно вказувати для Query або для Connection?
# XA0; або і там і там?
- Довідку я, природно предварітеьно прочитав :) але при ExecuteOption = [eoAsyncFetch, eoAsyncFetchNonBlocking], Cache = 20 ніфіга він не Фетч асинхронно 20 рядків, а качає всі 600 синхронно.
Може бути звернути увагу на св-во MaxRecords
Для локальних БД CursorLocation ігнорується.
База (mdb) на цій-же машині?
Користувач один або кілька?
Може варто подивитися в бік MSDE або Embedded FireBird?
2 AlexWlad
- база може бути і на віддаленій машині
- кілька користувачів (близько 3-5)
MSDE - громіздкий занадто для нашої задачі.
Про ФайрБерд чув, а ось про Embedded перший раз, що за звір?
UnDISCOvery # XA0; (08.09.05 20:41) [5]
Не більше ніж Акцесс.
UnDISCOvery # XA0; (08.09.05 19:46) [3]
Вирішив раніше Білла зробити нову файлову систему.
select field1, field1 from.
тільки потрібні поля. На швидкість вибірки це може сильно вплинути
> - А місце курсору потрібно вказувати для Query або для Connection?
для Query
А все-таки - як прискорити процес встановлення з'єднання АДО з БД Акцесс? Які настройки на це можуть впливати?
Відповіді читаю, як же інакше. А Ви питання?
Мова йде не про вибірку, а про коннекте до самої БД.
"1. Як прискорити коннект до бази? Після ADOConnection: = true довго думає і гальмує прогу."
У ADOConnection потрібно встановити CursorLocation = clUseServer? Це прискорити процес встановлення з'єднання?
Access - файл-сервер, швидше за все при коннекте щось кешируєтся на клієнт по мережі
при великих обсягах БД кеш теж може бути немаленький
Perehodi na FB, razmer distributiva - men "she ne pridumajesh: o)
i baza tak puhnut "ne budet i tormozov trudneje dostich.
UnDISCOvery # XA0; (09.09.05 12:34) [10]
Дистрибутив MSDE - окрема папка. Візьми диск з офісів і подивися - там не так вже й багато. Інша справа, якщо потрібні EM, QA, Profiler. Тут доведеться брати диск з повним сервером і ставити звідти.
Навіщо диски, дистрибутив вільний для скачування.