Търсене с TTable.locate
5 отговора
189 прегледа
Търсене с TTable.locate
Използвам за търсене в TTable следното:
TablIzs.Locate('DATEP;KODI;SEQN', VarArrayOf([DynDate,Kodiz, DynS]),[]))
Върви бавно. Две от полетата са ми индексни. Като сложа и третото да е индексно, бързодействието пада още.
Дайте идея за по-бърз механизъм на търсене.
TablIzs.Locate('DATEP;KODI;SEQN', VarArrayOf([DynDate,Kodiz, DynS]),[]))
Върви бавно. Две от полетата са ми индексни. Като сложа и третото да е индексно, бързодействието пада още.
Дайте идея за по-бърз механизъм на търсене.
Re: Търсене с TTable.locate
А каква ти е базата данни отдолу?
Ти имаш два (или три) отделни индекса, всеки от които е за една колона, така ли? Опитай вместо тях да сложиш един индекс, но по трите полета.
Другият вариант е да използваш TQuery вместо TTable и да си селектваш направо от базата търсените записи: select * from tablizs where datep = :datep and kodi = :kodi and seqn = :seqn...
Ти имаш два (или три) отделни индекса, всеки от които е за една колона, така ли? Опитай вместо тях да сложиш един индекс, но по трите полета.
Другият вариант е да използваш TQuery вместо TTable и да си селектваш направо от базата търсените записи: select * from tablizs where datep = :datep and kodi = :kodi and seqn = :seqn...
Re: Търсене с TTable.locate
Използвам Pradox.
Опитах с TQuery и наистина хукна два пъти по-бързо. За индексиране едновременно с трите полета също го пробвах, но не даде задоволителен рзултат. Затова питам за нещо качествено различно, което може би изпускам.
Опитах с TQuery и наистина хукна два пъти по-бързо. За индексиране едновременно с трите полета също го пробвах, но не даде задоволителен рзултат. Затова питам за нещо качествено различно, което може би изпускам.
Re: Търсене с TTable.locate
Като си направиш индекс по трите полета едновременно, ползвай IndexName & FindKey. Ето така:
---
...и аз пиша на кирилица!
Table1.IndexName := 'datep_kodi_seqn';
if Table1.FindKey([EncodeDate(2001,1,1), 'kod1', 1]) then begin
ShowMessage('Found!');
end;
---
...и аз пиша на кирилица!
Най-бързо е с TQuery
Експериментирах с всички възможности.
Най-бързо е с TQuery.
По-бавно е с две независими индексни полета от трите, които използвам.
При три независими или трите обединени, скоростта на търсене е най-малка.
Най-бързо е с TQuery.
По-бавно е с две независими индексни полета от трите, които използвам.
При три независими или трите обединени, скоростта на търсене е най-малка.
Re: Най-бързо е с TQuery
Търсене с Locate не е желателен за големи обеми защото фечва всички записи на датасета до намиране на търсения на клиента.
Редактирано от NDeu на