#0
by Повелитель
Справочник номенклатура относительно не большой 255 000 товаров. Заметил, что поиск по наименованию запросом составляет от 1 до 2 секунд. Поиск производим по справочнику списку номенклатуры. Вот запрос (время выполнения 1-2 секунды): Этот запрос (время выполнения 2-3 секунды, еще дольше, но это и было понятно, просто пишу для анализа): ВЫБРАТЬ мНоменклатура.Ссылка КАК Ссылка, мНоменклатура.Наименование КАК Номенклатура ИЗ И мНоменклатура.Ссылка В ИЕРАРХИИ(&Ссылка) Вопрос почему так долго ищет по наименованию? Нет даже мысли как это можно оптимизировать.
#2
by Повелитель
Причем у нас есть сайт 50 000 товаров, скорость самого запроса MySQL по наименованию десятые или сотые секунды.
#6
by МешочекЗнаний
Извиняюсь что вопрос в чужой теме, но можно ссылку на статью как это использовать?
#9
by Повелитель
Провел эксперимент. Попробовал поможет ли менеджер временных таблиц. Загнал туда весь справочник номенклатуры, а потом искал по нему. Скорость одинаковая, я удивлен. Вот весь код из обработки:
#12
by Провинциальный 1сник
за исключением формирования специфического индекса по лексемам, как это сделано в механизме полнотекстового поиска
#14
by Провинциальный 1сник
А смысл переносить на прямые запросы? Узкое место тут - seq scan по таблице без индекса, ибо like начинается с "%".
#19
by Повелитель
Вопрос про менеджер временных таблиц. Когда делаешь ПОМЕСТИТЬ, данные где хранятся в памяти сервера или во временной таблице? Вроде помню что во временной таблице в SQL, но не уверен. Если во временной таблице, то понятно, почему скорость не увеличивается.
#20
by Провинциальный 1сник
Сервер в любом случае эффективно кэширует, и разницы нет, ибо для поиска надо пробежаться в среднем по половине всех записей. Решение проблемы - полнотекстовый индекс. Можно попробовать заюзать полнотекстовый поиск 1с. Ну или изобрести свой велосипед, чтобы не быть завязан на мутные 1совские алгоритмы..
#22
by Провинциальный 1сник
Я бы делал так. Создал регистр сведений с двумя измерениями - Лексема и Ссылка. В подписке на событие "при записи" справочника Номенклатура создаю записи в этом регистре по каждому слову из наименования и ссылке на элемент справочника. Ну и первично обработкой заполнить этот регистр по существующим данным. А дальше, при подборе по слову делаем запрос по измерению регистра, и вытаскиваем ссылку.
#29
by тарам пам пам
Собственно да, почему для полнотекстового поиска не использовать механизм полнотекстового поиска? И еще - 1с умеет сама по части строки искать (даже без полнотекстового поиска), попробуй в свойствах справочника на закладке "Поле ввода" установить способ поиска строки "Любая часть". Может 1с при этом какой-то более оптимальный запрос сгенерирует.
#30
by H A D G E H O G s
"Может 1с при этом какой-то более оптимальный запрос сгенерирует." *facepalm
#31
by Повелитель
У нас обычные формы, способ поиска строки "Любая часть" это для управляемых по-моему.
#32
by ViSo76
Запрос написал топикастер. 1С не будет переписывать запрос, да и что тут перепишешь в like? Правильно подсказывают механизм полнотекстового поиска платформы использовать. На мой взгляд это самый оптимальный вариант.
#33
by тарам пам пам
ну почему сразу facepalm, 1с должна хотя бы ограничение на количество записей поставить. Плюс есть тот же CONTAINS, который вроде бы побыстрее LIKE работает.
#38
by H A D G E H O G s
like %ЗначениеПоиска - это один в один аналог ситуации пропущенного поля поиска в составном индексе.
#39
by Лефмихалыч
там план проще некуда <1C> Index Seek( OBJECT:( [db].[dbo].Справочник.Номенклатура.[Индекс по Наименование, Ссылка] AS [T1]), </1C> в нем нечего совершенствовать и ускорять. Если надо быстрее, придумывайте что-то с аппаратной частью. Ну, или еще лучше - глубоко-глубоко задумываться, а надо ли на самом деле часто такой лайк на сервер отправлять.
#40
by ptiz
Сделать маленький регистр, где будет измерение - Ссылка на товар, и ресурс - Наименование. По меньшей таблице быстрее отработает.
#41
by ptiz
Еще можно добавить "ПЕРВЫЕ 10". А остальные результаты - выдавать по требованию через отдельную кнопку "Показать еще".
#43
by Лефмихалыч
если у ресурса не включить индексирование, то будет только дольше. А, если включить, то будет так же
#44
by ptiz
Нужен эксперимент. В справочнике Номенклатура, обычно десятки реквизитов, и таблица может быть на порядок меньше.
#45
by Лефмихалыч
Запрос из сабжа генерит index seek по индексу, в котором только два поля. У справочника по индекс (наименование+Ссылка) генерится платформой автоматом, если наименование длиннее нуля. А вот ресурсы в индекс РС попадают только после включения у них индексирования. Соответственно, если у твоего РС будет индекс (Наименование+Ссылка), то в лучшем случае он даст точно такой же план и точно такую же производительность. В худшем - это будет table scan без производительности вообще.
#46
by ViSo76
Можно реализовать алгоритм с разбиением слова на буквы, с ссылками и указанием позиции в слове, и простым сгенерированным запросом вытаскивать нужную ссылку путём подсчёта их количества, но таблица будет очень большая
#48
by Повелитель
В рабочем запросе у нас стоит Первые 10, только цифра другая, я об этом в писать не стал, так как на производительность это не влияет. Пробовали по всякому. Подобный вариант описан в , но я понял он работать не будет. Так как ускорение можно добиться если использовать "=", а там тоже придется использовать ПОДОБНО.
#49
by xafavute
Индекс скан - это вообще не использование индекса. Просто этот индекс оказался кластерным
#50
by xafavute
можно пойти не прием: переименовать все номенклатуру в стиле магистра йоду. Ключевые слова в начало
#51
by Повелитель
Подобный эксперимент я проводил, Если брать 2 реквизита Ссылка и Наименование, то от количества колонок в таблице из которой идет выборка, время выполнения запроса не сильно зависит. Время выполнения запроса увеличивается если выбирать не 2 поля Ссылка и Наименование, а допустим еще 10 других.
#53
by Повелитель
Смотрю туда очень редко, так как примерно представляю какой 1с для SQL запрос подготовила. Повторюсь примерно.
#54
by ptiz
Чисто фантазия: все наименования склеить в большую хранящуюся в памяти строку, разделенную на блоки спецсимволом, и на неё натравить: или просто поиск подстроки, а если недостаточно - регулярные выражения. Но чтобы они возвращали номер блока. Но при изменении наименования надо строку перестраивать.
#55
by Лефмихалыч
если ресурс не индексировать, то будет table scan, т.к. не будет индекса, по которому можно было бы искать
#56
by Повелитель
В памяти в каком месте? У нас еще есть сайт на 1С Битрикс, там технологии позволяют хранить кэш в памяти. В 1с даже не слышал о таких возможностях. Временные таблице, хранятся на диске.
#57
by Провинциальный 1сник
"Так как ускорение можно добиться если использовать "=", а там тоже придется использовать ПОДОБНО" ПОДОБНО тоже использует индекс, если искать с начала слова.
#60
by Лефмихалыч
любые оптимизаяйца должны начинаться с вопроса: "назачем это, что нуждается в оптимизации, вообще нужно?" Т.к. идеальная оптимизация объекта будет тогда, когда объекта вообще исчезнет , а функция его будет выполняться
#61
by Torquader
Обычно ищут части слов - соответственно - наименование разбит на слова и уже искать по таблице слов, потом полученную выборку из таблицы слов (там ссылки на номенклатуру) выбрать из таблицы номенклатуры. Проблемы будут начинаться, если кто-то сокращает слова - но это уже никакой поиск не найдёт. Также можно повыкидывать из поиска все знаки препинания - и проверять на них уже полученную предварительным поиском номенклатуру. Если пользователь указывает несколько слов, разделённых пробелом - то сначала можно искать каждое слово, а потом по результату выбрать те, где первое идёт перед вторым (если, конечно, пользователю это важно).
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Отбор "характеристики номенклатуры" по "группе номенклатуры"
- Отбор серий номенклатуры по остаткам номенклатуры.
- Оптимизация по скорости работы базы ПП 1с:7.7 конфигурации: ТиС версии SQLредакции9.2
- Как: ИБ источники Реквезит номенклатуры в ИБ приёмник свойство номенклатуры
- Оптимизация регистра
- Удалить дополнительный реквизит номенклатуры у вида номенклатуры (УТ 11.1)
В этой группе 1С
- Нахальное удаление помеченных объектов без контроля ссылочной целостности
- Односторонний обмен УТ10.3 -> БП 3.0. Не переносятся склады.
- БП3 как ввести кладовщика и т д
- сборщик мобильного приложения - ошибка при создании ключа
- Citizen srp-80. Инструкция.
- 1с розница и битрикс / 1с розница себестоимость
- СКД как рассчитать отклонение в итогах?
- Запрос: условие на реквизит одного из регистраторов
- УТ 11.2: Акт о расхождениях после реализации
- WScript.shell + Telnet
- ERP 2.1 Где помощник ввода КБК?
- ЗУП 3.0. Не заканчиваются процедуры через фоновые задания.
- ERP 2.1 Как отразить уплату страховых взносов?
- SQL express и база 15ГБ и патч Сервер 64
- Создание Реализации на основе Заказ Клиента ут 11.2
- 1С запускается только вручную
- УПП, ввод остатков по счету 76.АВ
- Пользователь USR1CV8 грузит диск
- v7: УСН. Не начисляется ФСС НС
- ЗУП 2.5 и объединение двух организаций в одну.