![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск по индексированному полю типа integer [D7, FireBird 1.5]
DancerMan © (2006-04-10 10:57:00)Добрый день!
В таблице есть поле ID - integer. Есть уникальный индекс по этому полу.
Данные из таблицы получаю с помощью IBQuery. (order by ID)
Каким способом быстрее всего перейти на запись с заданным номером ID?
DancerMan (2006-04-11 12:22:00) [1]Всем спасибо!
Выбираю на клиента записи по мере необходимости.
Естественно, увеличились скорость загрузки приложения и скорость перехода на нужную запись.
Вопрос закрыт.
Виталий Панасенко (2006-04-11 10:29:00) [2]Сделай FetchAll. Думаю, после этого Locate будет работать быстрее,
т.к. ВСе 40000 записей будут на клиенте
> , а поле индексированно
Индексировано оно для сервера, чтобы клиент при выборке select * from table where id=:id_value получал данные как можно бьстрее(сервер по индексу их быстрее найдет, чем перебором)
atruhin (2006-04-10 15:33:00) [3]
> У меня есть компонент, который отображает данные в виде
> дерева. Я эти данные сразу и выбираю.
А ты думаешь зачем люди старались писали дерево, которое запрашивает данные по мере необходимости? Чтобы ты их все запрашивал на клента , апотом сортировал?
sniknik (2006-04-10 12:08:00) [4]> Я эти данные сразу и выбираю.
выбираеш на клиента где индекс который на сервере уже по барабану...
не знаю как в IBQuery, а например в ADODataSet можно построить локальный индекс, самый простой способ(заодно и упорядочится) методу Sort имя поля задать. вот после этого уже Locate будет индекс использовать.
Desdechado (2006-04-10 11:55:00) [5]> Или все-равно надо обрабатьвать каждое раскрытие ветки и выбирать данные по необходимости
Это было бы рациональнее с точки зрения скорости и трафика. В какие-то ветки пользователь может вообще никогда не зайти, так зачем читать все подряд?
Дочитывать только при нажатии плюса и отсутствия прочитанных к тому времени данных в этой подветке.
DancerMan (2006-04-10 11:47:00) [6]
> Anatoly Podgoretsky © (10.04.06 11:09) [6]
> Зачем нужно выбирать ненужные записи с сервера?
У меня есть компонент, который отображает данные в виде дерева. Я эти данные сразу и выбираю.
Если выборку этих данных написать в виде хранимой процедуры, это ускорит процесс? Или все-равно надо обрабатьвать каждое раскрытие ветки и выбирать данные по необходимости?
Sergey13 (2006-04-10 11:11:00) [7]2[5] DancerMan © (10.04.06 11:08)
> В таблице всего лишь 40000 записей, а поле индексированно. Мой Pentium 1,7 /512 задумывается где-то на 1-2 секунды.
Это потому, что ты не задумался оптимизировать запрос. Работа методами Парадокса/ДиБейса, не всегда хороша для SQL-серверов.
Anatoly Podgoretsky (2006-04-10 11:09:00) [8]Зачем нужно выбирать ненужные записи с сервера?
DancerMan (2006-04-10 11:08:00) [9]
> Desdechado © (10.04.06 11:05) [3]
> Savek (10.04.06 11:05) [4]
Мне кажется функция Locate работает слишком медленно. В таблице всего лишь 40000 записей, а поле индексированно. Мой Pentium 1,7 /512 задумывается где-то на 1-2 секунды.
Может есть более быстрый вариант перехода?
Desdechado (2006-04-10 11:05:00) [10]Locate
Savek (2006-04-10 11:05:00) [11]Locate
DancerMan (2006-04-10 11:01:00) [12]
> Виталий Панасенко (10.04.06 10:59) [1]
Мне нужно не выбрать запись с данным номером, а в открытом наборе данных перейти на нее.
Виталий Панасенко (2006-04-10 10:59:00) [13]select * from table where ID=:ID_VALUE