![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Скорость TIBQuery.Locate [D6, IB6.x]
Igor_ © (2002-10-02 11:47:00)В DBGrid выводится такой запрос - данные из трех таблиц
orders имеет forgein key на clients и order_status
Select o.*,c.ORG_NAME,c.CLIENT_NAME ,s.*
from orders o,clients c,order_status s
where o.client_id=c.id and o.status=s.id
когда делаешь Locate по какому-либо полю это происходит очень
медленно, даже при небольшой выборке (записей 20).
Как можно ускорить работу Locate?
ЮЮ (2002-10-02 13:11:00) [1]Или в обработчиках onBeforeScroll, onAfterScroll. Или в DB-aware компонентах, связанных с запросом. Обрубай всё перед Locate, а затем подключай.
alexandr (2002-10-02 12:40:00) [2]дело может быть в вычисляемых полях у TIBQuery
VAleksey (2002-10-02 12:34:00) [3]Если честно, то я никогда не сталкивался с такой медлительностью локейт-а. Может быть дело не в нем ?
Prooksius (2002-10-02 12:08:00) [4]Дело в том, что Locate работает в памяти с DataSet.
Тут все зависит от того, какими компонентами пользуешься.
Например, FIBplus работают так:
Если locate находит строку в уже отфетченной части DataSet, то просто позиционируется на нее, если эта строка еще не отфетчена, то фетчится до искомой строчки и позиционируется на нее.
Насколько я знаю, остальные компоненты так не работают. Locate сначата делает FetchAll, а потом, собственно, саму себя.
Но у тебя 20 строчек... Может быть, ты фетчишь какие-то большие поля или их очень много... Хотя, и это не должно влиять.
У меня на FIBPlus все идеально. Попробуй их.