В управляемой форме даже при отсутствии произвольного запроса в динамическом списке наблюдается подвисание при начальном отображении, а также при отмене поиска.
Полнотекстовый поиск производится с приемлемой производительностью.
Характеристики справочника
- Более 1 млн элементов справочника
- Полный список смотреть не надо, бессмысленно на таких объемах — возможна корректировка начального отображения с последующей работой только через уточняющие запросы
- До «разгруппировки» справочника требуется быстрая работа именно с ним, в дальнейшем — при наличии групп — предполагается что производительность должна нормализоваться
Анализ возможных причин
- реально большой размер списка (с этим ничего не поделать)
- некорректная работа платформы 8.3.8 (добавились кнопки листания, допускаем, что в начале производится какие-то промежуточные расчеты)
- наличие сортировки (при установке сортировка, форма запоминает настройки пользователя и восстанавливает при открытии) — отмена сортировки через свойства формы не решила проблему
- работа на файловом варианте базы данных (на первых этапах добиваемся оптимальности в этом режиме, далее оттестируем в sql)
- отборы (отсутствуют), но будут по проиндексированным полям
- наличие событий обработчиков активизации по строке (отсутствуют)
- медленная работа с диском (пока отметаем такой вариант, диск ssd)
Варианты решения
- Пробуем вариант с использованием команды «ПЕРВЫЕ 1000», но она вызывает ошибку в том, что запрос динамического списка не должен ее содержать. Перенос «ПЕРВЫЕ» во вложенный запрос решает проблему. Дальше, наблюдается медленная работа полнотекстового поиска (поиск альтернативными средствами, достаточно не комфортно и это не позволит оперативно работать с таким большим списком на этапе его разгруппировки).
- Следующей итерацией будет внутреннее соединение двух таблиц одного справочника (второй будет формироваться с командой ПЕРВЫЕ).Цель — вернуться к основной таблице с полнотекстовым поиском.
Результаты проверки
- поиск восстановился
- отборы и поиск идет не по всему списку а по 1000 (указанной в директиве, это плохой вариант)
- поднятие выборки до 100000 дает допустимую скорость выборки и поиска (но все равно не полную)
- отключение динамического считывания — не ускоряет начальное получение данных, но ускоряет листание — происходит без задержек
- начальное формирование 2-3 секунды (при 100000) — быстрее примерно во столько же на сколько уменьшилась выборка
- при вводе длинных фраз в полнотекстовом поиске наблюдаются тормоза — необходимо запрещать поиск до 3 символов (если внести фразу сразу из буфера обмена — поиск моментальный)
3. Останавливаемся на варианте, когда полнотекстовый поиск вызывается не стандартным диалогом, а более управляемым, после этого полученный список передается как параметры отбора для динамического списка.
- При этом работа замедляется только при размере таких отборов более 10000 позиций.
- Также остается минусом — зависимость от наличия и актуальности индекса полнотекстового поиска.
Реклама — величайшее искусство XX века.