Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.064 c
2-1192002526
alshtam
2007-10-10 11:48
2007.11.04
выбор базы данных


2-1192198988
Neo
2007-10-12 18:23
2007.11.04
как закрыть форму, если выполняется большой цикл?


15-1190864226
azamatufa
2007-09-27 07:37
2007.11.04
Про работу форума


2-1192022237
Саня
2007-10-10 17:17
2007.11.04
помогите вередать выборку в генератор отчетов Rave


2-1192280257
AlexanderMS
2007-10-13 16:57
2007.11.04
Проблема с курсором на Edit е.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский