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

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

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]

Замените в запросе звёздочку на явное перечисление полей.


Наверх

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