Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ускорение работы с dbf (очень большими)

79K
10 ноября 2012 года
timondrik
12 / / 09.11.2012
У меня имеется база dbf в больше чем млн. записей. Моя программа должна проверять базу на писутствие определённого полиса (не обного, а тысячу по порядку, не меньше). Вывожу не все поля, а только те по которым будет проводиться проверка, да и естественно ищет только где Серия такая то и Номер такой то. Т.е. программа выдаст только одну запись или вообще не выдаст ничего, если полиса нет в базе. Но даже при такой фильтрации и ужимках каждую строку программа проверяет чуть ли не 40-45 сек. Что мне зделать чтобы ускорить программу? Есть какие нибудь идеи? Работаю при помощи ADO | FoxPro драйвер.

 
Код:
if(polisCheck->Checked){
                        dm->POLICY->Close();
                        dm->POLICY->CommandText = "SELECT polis_ser,polis_num FROM POLICY WHERE polis_ser=:ser AND polis_num=:num ORDER BY polis_ser DESC";
                        dm->POLICY->Parameters->ParamByName("ser")->Value = param[2].Trim();
                        dm->POLICY->Parameters->ParamByName("num")->Value = param[3].Trim();
                        dm->POLICY->Open();
                        if(dm->POLICY->RecordCount < 1){
                                logError->Lines->Add(param[1].Trim()+"|Полиса нет в базе!|"+param[4].Trim());
                        }
                }
1
11 ноября 2012 года
kot_
7.3K / / 20.01.2000
использовать сервер БД (MSSQL, Firebird, MySQL)
79K
11 ноября 2012 года
timondrik
12 / / 09.11.2012
Цитата: kot_
использовать сервер БД (MSSQL, Firebird, MySQL)


Не вариант. Базу полисов мне поставляют именно в dbf. Попробовал только что проиндексировать базу. Скорость резко увеличилась, но всё равно не идеал :(
Я бы с радостью другую бы базу использовал

40K
11 ноября 2012 года
D129
228 / / 18.04.2012
чисто алгоритмически - затащите всю базу в память, создав список классов (связанных, отсортированных итп..) .
Миллион - это 20 лет назад было "много записей"

Если ваш класс будет содержать пять целых чисел, два текстовых по 20 символов - то миллион таких записей будет

4 * 5 + 20 = 40 байт * 1 000 000 = 40 000 000 байт или 40 мегабайт.

а сейчас файрфокс с одной страничкой отьедает 60 и не жужжит.

зато специализированный поиск будет просто мгновенный. я такое делал.
1
12 ноября 2012 года
kot_
7.3K / / 20.01.2000
Цитата: timondrik
Цитата: kot_
использовать сервер БД (MSSQL, Firebird, MySQL)


Не вариант. Базу полисов мне поставляют именно в dbf.


та хоть в китайских иероглифах. что мешает импортировать базу в свою и работать с ней?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог