Если у тебя нет ключей, которые удовлетворяют данным требованиям сортировки - только обычный фильтр.
Кстати, и с фильтром следует так-же быть внимательным - если предполагается большое кол-во отфильтрованных записей (больше ~30% от всего кол-ва), то можно использовать фильтрацию самой VIEW - она сделает это быстрее обычного цикла прямо в коде.
Если-же предполагается мало отфильтрованных записей, то в некоторых случаях обычный цикл перебора прямо в коде оказывается быстрее VIEW.
Ну, или переход на SQL - там вся фильтрация производится прямо на сервере и поэтому - быстро.
Кстати странно, rangelimit по очереди в ШВС это обычный {prop:filter} в строку которого пихается вся очередь для выборки, но работает быстро(куда быстрее просто прописанного фильтра).
Ну так VIEW - не просто "тупой" цикл отбора записей по заданным параметрам! Там есть некие элементы "интелекта" - переданный фильтр анализируется и по его результатам выбирается самый подходящий ключ выборки, если, конечно, перед открытием VIEW разработчик сам не задал приоритетный ключ выборки. Ну и, естественно, не следует из-за лени задавать в фильтре короткие выражения с использованием функций типа INRANGE/INLIST.
Т.е., в любом случае выражение:
'(F:CODE=1) OR (F:CODE=4) OR (F:CODE=7)' будет обработано быстрее выражения: 'INLIST(F:CODE,1,4,7) <> 0'.
Ну и, кроме того, анализатор фильтра просто не сможет из-за этих функций подобрать правильный ключ выборки.
Все это, естественно, справедливо ТОЛЬКО для достаточно больших обьемов.
На моей машине (P4-3200-1G), к примеру, каталог клиентов размером ~100000 записей "шерстится" VIEW практически независимо от фильтра:
- без фильтров чтение всех записей составляет ~1.5 сек.
- с ЛЮБЫМ простым фильтром, независимо от того, какие поля там присутствуют (ключевые/НЕключевые), время выборки + чтение отобранных записей занимает от 1 до 1.6 сек.
Расброс времени связан только с кол-вом записей в выборке.
Кстати, а вот обычный обход всех записей по Next занимает всего 1 сек. Естественно, если обход в файловом порядке - по ключу время обычного обхода увеличивается на порядок.
А если еще использовать и rangelimit-выражение по ключу, то время еще меньше - в зависимости от кол-ва записей в выборке.
=============================
С уважением,
Олег А. Руденко.
Oleg_Rudenko@mail.ru
Oleg_Rudenko@mail333.com
Библиотека DynaLib
http://dynalib.narod.ru
Написал: ClaList(2)