Форум: "Базы";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
Вниз
ADO + DBF = ужасно медленно Найти похожие ветки
← →
Praco (2003-10-08 15:52) [0]Раньше работал через BDE и все было неплохо. Пришлось в силу ряда причин перейти на ADO. Формат DBF: 3+
ConnectionString:
Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="CollatingSequence=ASCII;DBQ=C:\TEMP\RESEXPORT;DefaultDir=C:\TEMP\RESEXPORT;Deleted=1;Driver={Driver do Microsoft dBase (*.dbf)};DriverId=21;Exclusive=1;FIL=dBase III;FILEDSN=C:\Program Files\Common Files\ODBC\Data Sources\dBASE Files (not sharable).dsn;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=600;SafeTransactions=0;Statistics=0;Threads=3;UID=admin;UserC ommitSync=Yes;"
Делаю запрос через TADOQuery:
SELECT AC.RULEISN, COUNT(*) FROM AGRCOND AC
WHERE AC.RULEISN NOT IN (2,3,4,5,6) AND
((AC.DATEBEG BETWEEN :DATEBEG AND :DATEEND) OR
(AC.DATEDENOUN BETWEEN :DATEBEG AND :DATEEND) OR
(AC.DATEBEG <= :DATEBEG AND AC.DATEDENOUN >= :DATEEND) OR
EXISTS
(SELECT * FROM AGRSUM AGS
WHERE AGS.CONDISN = AC.ISN AND AGS.ACC = "1" AND
AGS.DATEVAL BETWEEN :DATEBEG AND :DATEEND))
GROUP BY AC.RULEISN
Через BDE выполнялся 5 мин(без индексов). Через ADO я не смог дождаться (> 2 часов).
Индексы пробовал добавлять, не помогает. Может есть какие-нибудь хитрые настройки в TADOQuery или TADOConnection?
Чего делать-то?
Буду крайне признателен за любые ссылки. Заодно, как вариант, посоветуйте компоненты доступа к DBF, желательно простенькие, бесплатные и зарекомендовавшие себя.
Спасибо.
← →
Delirium (2003-10-08 16:00) [1]Попробуй через Jet
← →
Praco (2003-10-08 16:02) [2]Забыл сказать.
В табличках примерно по 200000~300000 записей.
Когда я их заполняю, то скорость работы ADO и BDE примерно одинакова.
← →
Vlad (2003-10-08 16:16) [3]Можно узнать, а что за база данных такая ? Уж больно названия полей знакомые...
← →
KSergey (2003-10-08 16:18) [4]А может взять другие компоненты доступа для DBF, а? Какие - см. ветку рядом ("Срочно!...")
← →
Praco (2003-10-08 16:24) [5]Delirium ©
А можно подробнее?
Vlad ©
Прошу в аську :) 72054101
KSergey ©
Уже смотрю, пока вижу либо платные, либо не работают на Д7.
Модератору
А куда делась моя анкета? Пришлось заново регистрироваться.
← →
sniknik (2003-10-08 16:31) [6]ConnectionString:
через jet
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\TEMP\RESEXPORT;Extended Properties=dBase III;Persist Security Info=False
может и будет полутше.
← →
Praco (2003-10-08 16:48) [7]sniknik © (08.10.03 16:31) [6]
Спасибо, но примерно то же самое.
← →
sniknik (2003-10-08 17:18) [8]а если попробовать запрос через обьеденение сделать по
AGS.CONDISN = AC.ISN? без подзапроса, всяко быстрей должно
не пробовал?
если не жалко, зашли таблички (можно (и даже лутше) урезаные, а то в яшик не влезут), и сколько на них у тебя BDE отрабатывает (для сверки), вечером попробую переделать.
а можеш загнать таблици в Access и в нем попробовать запрос составить. интересно как его мастер этот запрос сделает.
← →
Praco (2003-10-08 18:04) [9]sniknik © (08.10.03 17:18) [8]
Пробовал
SELECT AC.RULEISN, COUNT(distinct ac.isn)
FROM AGRCOND AC
LEFT JOIN AGRSUM AGS ON AGS.CONDISN = AC.ISN
...
Конечно быстрей, на BDE 20 сек., но ни ADO, ни Jet не понимают, что в агрегатную функцию можно вставлять distinct.
Таблички высылаю, если есть охота в них ковыряться.
В любом случае спасибо.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.015 c