Имя: Пароль:
1C
1С v8
Возможно ли ускорить поиск по большому справочнику ?
0 АндрейRU
 
17.06.24
16:47
УТ 11.4
Есть справочник НоменклатураПоставщиков 350тыс наименований

Простой запрос на получения всех номенклатур выполняется 0,9с
Запрос с ПОДОБНО одного слова уже 2,5 сек.
Если запрос сложнее типа полнотекстового поиска то еще больше.

Возможно ли как то ускорить поиск, а то например поиск десятка товаров превращается в сплошное ожидание :(
1 vde69
 
17.06.24
16:32
отключи иерархию и дерево в представлении списка

ну и сделай роль без RLS
2 vde69
 
17.06.24
16:34
ну и еще

1с динамические списки индексирует на собственном сервере, то есть его родной поиск работает не через SQL а через собственные индексы которые лежат в каталоге сервера 1с, перенеси его на SSD и будет значительно быстрее
3 АндрейRU
 
17.06.24
16:40
(1) Скорость замерял через "Консоль запросов" т.е. соответственно насколько понимаю иерархия и дерево тут не применялось.

(2) Сейчас тестирую именно на SSD.
4 АндрейRU
 
17.06.24
16:43
Хотелось бы понять, возможно ли вообще ускорить раз в 10 например, или же с таким справочником только на несколько процентов
5 vde69
 
17.06.24
16:45
(3) динамический список использует ДРУГОЙ запрос, там результат выдается кусками, по этому замер в консоли некоректный...

в динамическом списке рекомендуется использовать ОТБОРЫ а не параметры
6 АндрейRU
 
17.06.24
16:50
(5) Спасибо, буду изучать.
7 mikecool
 
17.06.24
17:44
(5) "в динамическом списке рекомендуется использовать ОТБОРЫ а не параметры " - откуда дрова?
8 Ivan_495
 
17.06.24
17:52
можно привязать группы к пользователям, можно использовать кодирование групп
9 Повелитель 1С
 
17.06.24
18:20
0.9с это под полными правами запрос вида ВЫБРАТЬ Ссылка ПОМЕСТИТЬ ВТ Из Справочник.НоменклатураПоставщиков?

Используется РЛС? Если используется, можно ускорить, отключив его или поставив производительный режим.

Это подчиненный справочник, у него все индексы выглядят как-то так: Разделители + Владелец +...
Соответственно при поиске, чтобы использовался индекс, нужно делать отбор по владельцу.
10 Повелитель 1С
 
17.06.24
18:22
(9) Хотя про индексы я погорячился. Индексы без владельца тоже должны быть.
11 dali
 
18.06.24
05:05
(0) Подобно не очень хорошо работает в запросах, нужно использовать его правильно.
https://its.1c.ru/db/v8std/content/658/hdoc
12 breezee
 
18.06.24
06:07
(11) Подобно работает хорошо если ПОДОБНО "строка%"
начало строки должно совпадать. Это в статье написано которую Вы скинули.
По САБЖу предлагаю 1) Посмотреть структуру хранения БД. Может можно еще накинуть индекс. Может не в самом наименовании хранить данные, а новый реквизит сделать, дублировать наименование и добавить индекс.
2) Посмотреть на Сервере СУБД план запроса который выполняется. Может вообще статистику обновить. Собрать данные по загрузке оборудования. Может у вас сервер надо менять.
3) Посмотреть в сторону регистра с измерением наименования и ресурсом ссылка - тогда отбор будет по перовому измерению. Искать по регистру. Дублировать туда данные при записи справочника. Опять же если не будет конструкции %Че-то там
4) Написать прямой запрос к СУБД и вызывать его из 1С

Если простой запрос на 350к выполняется 0.9 сек это уже не очень хорошо, сервак не супертоп
13 DrZombi
 
18.06.24
06:13
(0) Да, можно.

https://wonderland.v8.1c.ru/blog/novye-funktsii-yazyka-zaprosov-i-sistemy-komponovki-dannykh/?sphrase_id=663464#:~:text=%D0%A1%D0%BE%D0%BA%D1%80%D0%9B%D0%9F(TrimAll)%20%E2%80%93%20%D0%BE%D1%82%D0%B1%D1%80%D0%BE%D1%81%D0%B8%D1%82%D1%8C%20%D0%BD%D0%B5%D0%B7%D0%BD%D0%B0%D1%87%D0%B0%D1%89%D0%B8%D0%B5 ,%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C%20%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D0%B5%20%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%B0%20%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D1%8B%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8.

Система компоновки данных
В язык выражений системы компоновки данных добавлены новые функции:

СокрЛ(TrimL) – отбросить незначащие пробелы слева.

СокрП(TrimR) – отбросить незначащие пробелы справа.

СокрЛП(TrimAll) – отбросить незначащие пробелы слева и справа.

Лев(Left) – получить первые слева символы строки.

Прав(Right) – получить первые справа символы строки.

СтрНайти(StrFind) – найти подстроку в строке (без учета регистра).

ВРег(Upper) – преобразует все символы строки в верхний регистр.

НРег(Lower) – преобразует все символы строки в нижний регистр.

СтрЗаменить(StrReplace) – заменяет все вхождения подстроки на другую подстроку (без учета регистра).

НСтр(NStr) – получает строку на языке пользователя (аналогично тому, как работает метод НСтр глобального контекста). Параметры:

ИсходнаяСтрока – строка, содержащая строки на разных языках (например, "ru = 'Добрый вечер!'; en = 'Good Evening!'").

КодЯзыка (необязательный) – строка с кодом языка, на котором нужно получать строку. Если не указан - строка получается на языке текущего пользователя.
14 DrZombi
 
18.06.24
06:15
Скажем так, СокрЛП или НРег или СтрНайти, работает в разы шустрее "Подобно"
15 vde69
 
18.06.24
06:18
все советы из (12) так себе.

1. Сразу видно ТС молодой и зеленый, и ему разбиратся с индексами и чем-то более сложном не айс
2. Не нужно изобретать велосипед, динамический список очень хороший объект и стоит использовать его ШТАТНЫЕ возможности, сделать лучше штатного в теории можно, но это сравнимо полету на луну.
3. Может стоит вообще отказатся от сложных запросов и решить проблемму административно? Или предложить вариант работы пользователя где таких запросов будет мало?
16 vde69
 
18.06.24
06:21
сейчас выяснится, что база файловая :)
17 breezee
 
18.06.24
06:41
(15) Спасибо, больше не буду советовать))
18 Web00001
 
18.06.24
08:26
(12) советы все верные
1. Это придется сделать, когда-то надо начинать
2. Никаких велосипедов. Если проблема с СУБД то будет тормозить даже если там 1000 строк
3. Может. А может попробовать решить проблему с которой пришел ТС
Из (0) и дальнейшего обсуждения я не вижу слово динамический список из уст ТС где вы все взяли его? Я так понял все тесты на которые жалуется ТС были выполнены из консоли.
19 steep1
 
18.06.24
08:32
(0) А смысл ускорять? если бы минута была поиска.
20 breezee
 
18.06.24
09:26
(18) Действительно. Че-то не выспался( Чертовы соседи шумели ночью
21 Web00001
 
18.06.24
09:46
(19)>А смысл ускорять? если бы минута была поиска.
Допустим клиент работает с таблицей и перебирает там какие-то позиции. На каждый щелчок мышью подбирается определенный набор данных основанный на текущей строке. В этом случае, если после каждого клика нужно ждать одну или (жесть ккакая) 2.5 секунд. Через полчаса работы захочется ударить монитор кулаком. А через час точно ударишь. Так никаких мониторов не напасешься.
22 steep1
 
18.06.24
10:24
(22) так вопрос в подготовке данных и поиск уже по этим данным, а не по всей базе 1С - это ведь существенно ускорит поиск
23 Dmitrii
 
18.06.24
11:48
(0) Какая задача стоит?
Полностью сценарий работы пользователя можно описать?

Может в вашем случае быстрее будет работать 1С-овский полнотекстовый поиск с включенным ограничением по области поиска (только справочник Номенклатура поставщиков), в привилегированном режиме без получения описания и представления. А уже с полученным списком поиска работать дальше.
24 Web00001
 
18.06.24
13:15
(22)Может оказаться, что непонятно заранее, что надо готовить. А готовить все возможные варианты будет занимать слишком много или времени или ресурсов или и того и другого или будет слишком быстро терять актуальность. Но какой-то заранее проиндексированный регистр(который формируется ни перед открытием формы, а в процессе записи данных) в помощь вполне себе рабочая схема.
25 steep1
 
18.06.24
14:47
(24) Полностью сценарий работы пользователя можно описать?