Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.04;
Скачать: CL | DM;

Вниз

Как оптимизировать поиск по БД?   Найти похожие ветки 

 
Neo ©   (2007-10-12 22:24) [0]

Нужно оптимизировать поиск по БД, сод-ей примерно полмиллиона записей - посчитать какие позиции сколько раз повторяются. Для начала думаю оптимизировать поиск повторений для 1 позиции (сейчас это занимает примерно 1,5 минуты), а потом уже по всей базе, т.к. с такой скоростью проверки поиск повторов для всех позиций займет слишком много времени - а нужно уложиться хотя бы часов в 7-8. Буду очень признателен за помощь!  привожу код - открытие базы и поиск -

1) Открытие
Query1.Active:=false;
Query1.DatabaseName:=Form2.LabeledEdit1.Text;
Query1.SQL.Text:="SELECT запрос FROM таблица1.db";
DataSource1.Dataset:=Query1;
Query1.Active:=true;
DBGrid1.Visible:=true;

2) Поиск
DBGrid1.Visible:=false;
KOLVO:=Query1.RecordCount;
POVTOR:=0;
ZZ:=LabeledEdit1.Text;
k:=0;

for i:=0 to KOLVO do     //главный цикл
if (Query1.FieldByName("запрос").Value)= ZZ then POVTOR:=POVTOR+1;
LabeledEdit2.Text:=IntToStr(POVTOR);
Query1.Next;

if i=10000*k then begin Form1.Refresh; k:=k+1; end;
Application.ProcessMessages;
if Application.Terminated then Exit;
end;


 
Desdechado ©   (2007-10-12 22:55) [1]

Тяжелый случай. Для такой цели есть индексы и запрос SELECT Count(*)


 
Johnmen ©   (2007-10-13 00:19) [2]

Мама дорогхая...
Это же крыша может съехать от такого глюкадрома...
И где такому учат?


 
Германн ©   (2007-10-13 00:29) [3]


> И где такому учат?

В Матрице наверно. :-)


 
Johnmen ©   (2007-10-13 00:39) [4]


> Германн ©   (13.10.07 00:29) [3]
> В Матрице наверно. :-)

Не, там ребята реальные реально программировали. Вон та в красном чего стоит!


 
Германн ©   (2007-10-13 00:52) [5]


> Johnmen ©   (13.10.07 00:39) [4]

Значит автор спёр свой ник :-)


 
lod   (2007-10-13 15:24) [6]

Вопервых не используй BDE а используй ADO компоненты.
Во вторых как тебе говорили осуществляй поиск через запрос так намного проще SQL для этого и предназначен, на кройняк можно воспользваться методом Locate, который есть в ADO или свойвствами filter.
А то что ты тут понаписал полная чуш.


 
Desdechado ©   (2007-10-13 15:50) [7]

lod   (13.10.07 15:24) [6]
Слишком безапелляционное заявление.
Судя по таблица1.db, это парадокс, и АДО тут как зайцу стоп-сигнал.
Locate есть и в родных компонентах, в только здесь он 100 лет не нужен, так же как и Filter.
И SQL здесь не проще, а просто правильней. Да и быстрее.


 
Ping   (2007-10-13 17:07) [8]

А как насчет просто сгруппировать?

SELECT [Запрос], Count(*)
FROM [Таблица1]
GROUP BY [Запрос]


 
Desdechado ©   (2007-10-13 17:30) [9]

Ping   (13.10.07 17:07) [8]
Именно об этом я в [1] и говорил.



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

Текущий архив: 2007.11.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
15-1191413628
Ламот
2007-10-03 16:13
2007.11.04
Как вернуть меню в Excel ?


15-1191237113
Суслик
2007-10-01 15:11
2007.11.04
Покритикуйте описание системных требований моего продукта


2-1192433468
Кирей
2007-10-15 11:31
2007.11.04
как выбрать самый новый файл по маске


11-1175321503
Trible
2007-03-31 10:11
2007.11.04
Options для EditBox


15-1190710324
shlst
2007-09-25 12:52
2007.11.04
Activesync и КПК, сервиспак2 причина вражды :)