Главная страница
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.022 c
2-1192393803
Ярослав
2007-10-15 00:30
2007.11.04
0,146 <> 0,146!!!


2-1192101439
snake-as
2007-10-11 15:17
2007.11.04
Переместить объект на форме


2-1192194729
PPointer
2007-10-12 17:12
2007.11.04
Текстовый файл


15-1191413628
Ламот
2007-10-03 16:13
2007.11.04
Как вернуть меню в Excel ?


4-1177961835
Альберт
2007-04-30 23:37
2007.11.04
2 битмапа в 1