Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

поиск в локальной БД


.dzmitry ©   (2011-07-11 12:01:00) 

Есть локальная БД (EvaluateDB) в таблице которой нужно искать значения в индексном поле Id (1 000 000 записей). Как добиться максимального быстродействия при поиске? Что будет быстрее работать FindKey, Locate, Lookup?


Dennis I. Komarov   (2011-07-11 13:30:00) [1]

... и правильный INSERT


Anatoly Podgoretsky   (2011-07-11 13:08:00) [2]

Умрешь дожидаться окончания работы программы.
Сделай лучше правильный SELECT


.dzmitry   (2011-07-11 13:05:00) [3]

В принципе может и 1 000 000 раз. пишу функцию синхронизации таблицы БД с xml-файлом по полю Id. Из xml-файла получаю Id, если запись с таким Id существует в таблице БД - обновить определенные поля этой записи данными из xml-файла, если не существует - добавить новую запись, т.е. нужно каждый раз проверять существование записи с определенным значением Id.


Anatoly Podgoretsky   (2011-07-11 12:24:00) [4]

FindKey не везде работает.
Lookup не совсем поиск, это выборка.

Я лично предпочитаю чистую выборку SELECT ..., меня особо скорость не интересует, а интересует надежность и универсальность.

А что поиск осуществляется 1  000 000 раз что ли?


.dzmitry   (2011-07-11 12:15:00) [5]

По моим тестам поиск через FindKey быстрее


procedure TForm1.Button1Click(Sender: TObject);
var
 I, N: Integer;
 T: Cardinal;
begin
 T := GetTickCount;
 for I := 1 to 5000 do
 begin
   Randomize;
   N := Random(1000000);
   TestTable.FindKey([N]);
   //TestTable.Locate('Id', N, []);
   //TestTable.Lookup('Id', N, 'Id');

 end;
 ShowMessage(IntToStr(GetTickCount - T));

 //
 // - FindKey - 141 ms
 // - Locate  - 164 ms
 // - Lookup  - 172 ms
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо