![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SELECT vs FindKey
JustDoIt © (2013-11-04 12:02:00)Почему запрос работает медленнее, чем поиск в таблице? В таблице 10000 записей, разница в скорости 80-110msc
function IDIsExists(const ID: Integer): Boolean;
var
Q: TQuery;
begin
Q := TQuery.Create(nil);
try
Q.DatabaseName := 'items';
Q.SQL.Text := 'SELECT * FROM item WHERE id = :id';
Q.Prepare;
Q.ParamByName('id').AsInteger := ID;
Q.Open;
Result := Q.RecordCount > 0;
finally
Q.Free;
end;
end;
function IDIsExists2(const ID: Integer): Boolean;
var
T: TTable;
begin
T := TTable.Create(nil);
try
T.DatabaseName := 'items';
T.TableName := 'item';
T.Open;
Result := T.FindKey([ID]);
finally
T.Free;
end;
end;
Ega23 (2013-11-06 08:13:00) [1]
> Заменял, чтобы возвращалось только поле id и добавлял TOP
> 1, все равно есть разница, не в пользу запроса.
TSQL?
exists попробуй.
http://msdn.microsoft.com/ru-ru/library/ms188336.aspx
Jeer (2013-11-06 00:14:00) [2]Result := Q.RecordCount > 0;
>>
Result := not Q.IsEmpty
KilkennyCat (2013-11-05 06:00:00) [3]
> при одном и том же вопросе
=запросе
KilkennyCat (2013-11-05 05:59:00) [4]я вот сейчас средствами phpmyadmin анализировал время выполнения своих запросов, довольно-таки большая разница при одном и том же вопросе. в разы. в основном, разница по времени открытия таблицы.
Получается, что сравнивать запрос и поиск без предварительной проверки, что запрос действительно выполнился максимально быстро не имеет смысла.
Скорее всего, то же самое можно сказать и про поиск.
sniknik (2013-11-04 18:35:00) [5]> Почему запрос работает медленнее, чем поиск в таблице?
есть клиент серверные база/подход, а есть файл серверные, для каждого выгоднее свои методы.
без указания, что именно используется вопрос бессмыслен.
брат Птибурдукова (2013-11-04 17:15:00) [6]Не понял. Ты намекаешь, что много индексов или что я неосилил прочесть всю фразу и стал задавать глупые вопросы? Я в БД профан, просьба на это делать скидку.
Плохиш (2013-11-04 16:49:00) [7]Я понимаю, что до предлога "и" букаф больше, чем после.
брат Птибурдукова (2013-11-04 16:09:00) [8]
> Первый вариант перебирает всю таблицу индексов и после считает
> количество.
То есть проблема в Result := Q.RecordCount > 0?
Плохиш (2013-11-04 14:11:00) [9]Первый вариант перебирает всю таблицу индексов и после считает количество.
Второй идёт по таблицы индексов до первого совпадения ничего не считая.
Германн (2013-11-04 13:13:00) [10]Для какого-нибудь Парадокса или ДБейза почему бы и не быть быстрее напрямую работать с файлом.
ухты (2013-11-04 12:41:00) [11]а как замеряли?
JustDoIt (2013-11-04 12:12:00) [12]Заменял, чтобы возвращалось только поле id и добавлял TOP 1, все равно есть разница, не в пользу запроса.
RWolf (2013-11-04 12:09:00) [13]Замените в запросе звёздочку на явное перечисление полей.