![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
поиск в локальной БД
.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;