Имя: Пароль:
1C
1С v8
Нужна помощь по запросу.
0 ksergey
 
13.07.15
10:24
Добрый день коллеги.
Подскажи в таком вот запросе возможности оптимизации,  т.к. в последнее время пользователи стали жаловаться на длительное время поиска товара по артикулу.  Замер производительности показал , что  в алгоритме 93% занимает время выполнения запроса.
Запрос несложный, поэтому я например не могу придумать хороший вариант оптимизации,  кроме как установить индексы по всем полям поиска.

Основные товары в базе – это автозапчасти и большое значение имеет поиск по Артикулу (порядка 1млн записей).
Суть запроса (чтобы понимался лучше) – в карточке товара есть 2 поля Артикул и АртикулНеОригинал, а также соответствующие табчасти (для учета различных вариантов аналогов и схожих товаров по артикулам).
  
Запрос.Текст =
    "ВЫБРАТЬ
    |   Номенклатура.Ссылка КАК Ссылка
    |ИЗ
    |   Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |   Номенклатура.Артикул ПОДОБНО &Отбор
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ
    |   Номенклатура.Ссылка КАК Ссылка
    |ИЗ
    |   Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |   Номенклатура.АртикулНеОригинал ПОДОБНО &Отбор
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ
    |   НоменклатураАртикулы.Ссылка
    |ИЗ
    |   Справочник.Номенклатура.Артикулы КАК НоменклатураАртикулы
    |ГДЕ
    |   НоменклатураАртикулы.Артикул ПОДОБНО &Отбор
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ
    |   НоменклатураАртикулыОригинал.Ссылка
    |ИЗ
    |   Справочник.Номенклатура.АртикулНеОригинал КАК НоменклатураАртикулыОригинал
    |ГДЕ
    |   НоменклатураАртикулыОригинал.Артикул ПОДОБНО &Отбор";



Заранее благодарен за любую идею.
1 ksergey
 
13.07.15
10:25
поиск выполняется как правило по части (4-5символов) артикула.
2 mikecool
 
13.07.15
10:25
завести артикул справочником - как идея?
3 Ненавижу 1С
 
гуру
13.07.15
10:26
пример передачи параметра Отбор покажи
4 lera01
 
13.07.15
10:33
Может, есть смысл регистр сведений приспособить для хранения этого соответствия? Ресурсов нет, измерения Номенклатура, СтрокаАртикул. При записи номенклатуры организовать ведение этого регистра...
5 D_E_S_131
 
13.07.15
10:37
"в последнее время пользователи стали жаловаться..." — может базу нужно переиндексировать?
6 D_E_S_131
 
13.07.15
10:37
(4) Лишние сущности предлагаете.
7 palpetrovich
 
13.07.15
10:39
ниче не понял, что правда есть
Справочник.Номенклатура.Артикул и
Справочник.Номенклатура.Артикулы ?
и зачем вообще 2 последних части запроса, в чем их смысл?
8 Drac0
 
13.07.15
10:41
(0) Заюзай полнотекстовый поиск.
9 Drac0
 
13.07.15
10:41
(7) Там есть основной артикул, который в шапке и список левых артикулов докучи в ТЧ.
10 palpetrovich
 
13.07.15
10:43
(9) т.е еще 2 ТЧ артикулов? причем одна ТЧ называется так-же как и реквизит АртикулНеОригинал ?
11 fisher
 
13.07.15
10:43
Из идей - зафигачить все артикулы в один регистр сведений с нужными измерениями и прикрутить полнотекстовый поиск.
Но даже и без полнотекстового поиска быстрее будет.
12 palpetrovich
 
13.07.15
10:46
+(10) если так + "основной артикул" присутстует в ТЧ, то можно по "основному" запрос не строить
... а вообще да, РС - нарашивается
13 Fragster
 
гуру
13.07.15
10:56
если поиск по любой части, то (8), если только по началу, то проверить индексацию по полям.
14 exchang
 
13.07.15
10:58
ГДЕ
Номенклатура.Артикул + Номенклатура.АртикулНеОригинал ПОДОБНО &Отбор
15 ksergey
 
13.07.15
11:03
(3)
Запрос.УстановитьПараметр("Отбор", "%" + СокрЛП(Отбор) + "%");

(12) согласен-это упростит запрос, но надо проверить - возможно есть записи, где только один Основной артикул, а допол.ТЧ - пустые.

(14) идею понял, проверю

насчет РегистраСведений - к такой идее тоже пришел, возможно если ничего не поможет придется реализовать
16 ksergey
 
13.07.15
12:09
спасибо всем за участие в обсуждении
17 ksergey
 
13.07.15
16:50
(14) сделал данный вариант - реально помогло, скорость выросло примерно на 60% !
Проанализировав заполнение артикула в справочнике, выяснил что в таб.частях Артикулов немного. Т.е. основная часть нагрузки в запросе на Части запрос №1 и №2.
Получается, соединив их в одно условие в запросе избавился от одного из нагруженных блоков, и получил реальный бонус
Спасибо
18 D_E_S_131
 
13.07.15
17:48
(17) Одно НО — по такому условию не удастся определить оригинальный или нет нашелся артикул. Думаю, что в твоем запросе замена "ОБЪЕДИНИТЬ" на "ОБЪЕДИНИТЬ ВСЕ" дала бы и больший прирост.
19 MKZM
 
13.07.15
18:47
(18) Почему?
20 РазДва
 
13.07.15
18:58
(15) Убери "процент" в начале отбора, всё "залетает", нефиг искать артикул с середины..
21 ILM
 
гуру
13.07.15
19:02
А поиск идет всегда по первым 5 символам?
22 MKZM
 
13.07.15
19:05
(18) "Подобно" и оригинально, две вещи несовместны, как сказал бы Пушкин.
23 ILM
 
гуру
13.07.15
19:05
(18) А ВЫБОР сможет помочь
24 MKZM
 
13.07.15
19:09
У него четыре выборки. Где все все подобно. Что тут можно посоветовать? Так надо. Значит так надо.
25 MKZM
 
13.07.15
19:11
Другой вопрос, можно получить все подобное, а потом сделать выборку.
26 MKZM
 
13.07.15
19:11
Но быстрее это будет? Надо считать.
27 ILM
 
гуру
13.07.15
19:17
Лучший выход ПОДСТРОКА(Поля, 1, 5) = &Отбор
28 MKZM
 
13.07.15
19:18
(27) Чем лучше?
29 MKZM
 
13.07.15
19:21
поиск выполняется как правило по части (4-5символов) артикула.
Как правило. или?
30 MKZM
 
13.07.15
19:25
Понял. В торговле 10, вроде, есть форма поиска. Посмотри как реализуется.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший