Вход | Регистрация


1С:Предприятие ::

Метки: 

Справочник с 1,5 млн записей - ускорить поиск

Я
   aspirant
 
27.12.12 - 17:41
Привет всем! Выручайте - я совершенно не силен в вопросах ускорения:
есть справочник с около 1,5 записей - товары. У них оригинальные артикулы. Остальное (названия) могу быть совпадающими. Заявки от клиентов приходят в электронном виде в свободной форме. Позиций в заявках - от 100 до 1000. Так вот вопрос: как лучше поиск вести по справочнику - по вхождению подстроки (номер в заявке клиента) в артикул номенклутары, или регистр забацать с содержанием артикулов - что быстрее работает?
 
 
   zak555
 
1 - 27.12.12 - 17:42
Карандаш М артикул 1
Карандаш М артикул 2
Карандаш М артикул 3
Карандаш М артикул 4

?
   Reset
 
2 - 27.12.12 - 17:45
В смысле ты собираешься забацать регистр со всеми вариантами подстрок артикулов? тогда да, быстрее.
Иначе какая разница в какой таблице искать.
   aspirant
 
3 - 27.12.12 - 17:45
да, примерно так. Но точнее вот так:
Карандаш М артикул 1234111
Карандаш М артикул 1234112
Карандаш М артикул 1234101

в заявке клиента будет карандащ М артикул 1234
   acsent
 
4 - 27.12.12 - 17:47
а не проще ли полностью артикул набирать?
   Reset
 
5 - 27.12.12 - 17:47
Если вынести 1234111 в отдельный инлексированный реквизит или в регистр "соответсвий" то посик будет быстрее
   aspirant
 
6 - 27.12.12 - 17:47
да нет, наверное в моем случае "какая разница в какой таблице"
   Reset
 
7 - 27.12.12 - 17:48
а, недочитал.
Если у клиента 1234 то нет смысла - все равно подобно придется использовать
   FIXXXL
 
8 - 27.12.12 - 17:48
сделать унифицированную форму заявки с кодом товара
смотри в сторону РС НоменклатураКонтрагентов
   aspirant
 
9 - 27.12.12 - 17:50
(5) индексированные реквизиты помогли. Но когда база достигла 1,5 млн и они уже не помогают. Одна заявка от 17 до 60 минут грузится на виртуальном диске в РАМ памяти, процы под 100% (ну 25%)
   aspirant
 
10 - 27.12.12 - 17:53
Я к сожалению 400 раз обращаюсь с запросом подобно %артикул%. А как сделать чтоб сразу отобрать (в запрос передать перечень подстрок-артикулов)?
 
 Рекламное место пустует
   Reset
 
11 - 27.12.12 - 17:53
(10) :) Передать параметром таблицу
   Reset
 
12 - 27.12.12 - 17:54
Потом ее содинить со спр через подобно
   aspirant
 
13 - 27.12.12 - 17:55
(12) пробую! Спасибо!
   Reset
 
14 - 27.12.12 - 17:57
т.е всесто Где Спр.Артикул Подобно &Параметр

Выбрать Таб.ПодАртикул Поместить Заявка из &Таб Как Таб;
Выбрать Спр.Ссылка
внутренее соединение Таб
по Спр.Артикул Подобно Таб.ПодАртикул


Честно говоря, я думал что и сделано)
   Reset
 
15 - 27.12.12 - 17:58
что так и сделано*
   Reset
 
16 - 27.12.12 - 17:58
поправил
Выбрать Таб.ПодАртикул Поместить Заявка из &Таб Как Таб; 
Выбрать Спр.Ссылка 
внутренее соединение Заявка 
по Спр.Артикул Подобно Заявка.ПодАртикул
   aspirant
 
17 - 27.12.12 - 18:01
не дает связать по ПОДОБНО, только равно
   wms
 
18 - 27.12.12 - 18:03
на форме зачем искать?
заполнение таб.части в заказ- пишется обработка и запросом
   wms
 
19 - 27.12.12 - 18:04
артикул в списке разве не быстро?
   aspirant
 
20 - 27.12.12 - 18:05
(18) не, я на форме тока из файла ексель читаю, потом таблицу с артикулами на сервер передал, а там уже 400 раз запрос через %подобно" сделал. Прошу не чморить. Но не знаю как.
   wms
 
21 - 27.12.12 - 18:06
ВЫБРАТЬ
   Номенклатура.Ссылка
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Артикул В(&СписокАртикулов)
   aspirant
 
22 - 27.12.12 - 18:07
(21) артикулы не полностью совпадают. - на 80-90% только совпадают.
   Йохохо
 
23 - 27.12.12 - 18:09
так и сделай, выбери и проиндексируй Артикул как Строка(4) и потом на равенство
должен быть выигрыш, т.к. = сильно быстрее
   wms
 
24 - 27.12.12 - 18:10
если начало совпадает то мож так поможет:

ВЫБРАТЬ
   Номенклатура.Ссылка
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    ПОДСТРОКА(Номенклатура.Артикул, 1, 4) = &подстрАртикула
   aspirant
 
25 - 27.12.12 - 18:12
(23)(24) спасибо за идеи. Как же в списке когда находишься - жмешь найти (УФ) вводишь подстроку и через 10-15 секунд уже список из 10 товаров на морде высветился. Меня бы устроило.
   aspirant
 
26 - 27.12.12 - 18:15
База то всего ничего - 300 метров. Самописка из 2 справочников. Для выписки счетов. Может ее на SQL перенести? КОличество транзакций на запись в ней - фиг да нифига, а вот чтение - напряги...
   ILM
 
27 - 27.12.12 - 19:29
Проанализируй продажи. Весь товар продается неравномерно. Создай индекс по продаваемости товара. Тот что чаще берут выводи первым в поиске и ссылайся в заказах на него. В 98% случаях будете попадать куда нужно, а 2% погрешность ввода - вам простят. Главное чтобы товар был на складе или для заказа у поставщика.
Если заявки ваших клиентов будут удовлетворяться на 90-95%, а не на 60-80, то и продажи возрастут.
   ILM
 
28 - 27.12.12 - 19:32
Как еще один вариант, выбрать подстрок(наименования) + ссылку во временную таблицу и проиндексировать подстроку. Для поиска  использовать именно её, а потом подтягивать ссылки и остатки.
   КонецЦикла
 
29 - 27.12.12 - 19:44
Феерично, связывать таблицы по Подобно
Может нужно в консерватории (заказах) артикулы подправить?

Ну, допустим, артикул набранный клиентом, подобен трем товарам - какие действия автора?
Сначала задачу нужно решить в уме, а потом уже написать код.
   aspirant
 
30 - 27.12.12 - 21:34
(29) такие случаи есть, в таком случае менеджеру предоставляется право выбора из 3 товаров. Выводится окно со списком найденных товаров и менеджер тыкает нужный.
   aspirant
 
31 - 27.12.12 - 21:35
(29) про феерию знаю, потому и пытаюсь уйти от нее. А про "решить в уме" - так здесь уже на логику нет задачек, вопрос "как быстрее найти 500 подстрок".
   Bober
 
32 - 27.12.12 - 21:43
(0) решания два
1. Клиент шлет заказы в артикулах фирмы, поиск идет на =
2. Решение через полнотекстовый поиск

Ps самый лучший для фирмы, это сделать веб-морду к этой конфе и пусть клиенты сами делают заказы
   aspirant
 
33 - 27.12.12 - 21:56
(32) ну видимо у Вас такая задача была. Так и идем к вебморде. Это финал будет. Но сейчас старт только.Хотят сами мочить заявки.
 
 
   Armando
 
34 - 27.12.12 - 21:58
Я за полнотекстовый поиск
   aspirant
 
35 - 27.12.12 - 22:07
полнотекстовый, это = или подобно? я уже туплю
   Рамиль Маугли
 
36 - 27.12.12 - 22:14
Какая конфигурация то ?
   Armando
 
37 - 27.12.12 - 22:19
   aspirant
 
38 - 27.12.12 - 22:26
(36) Моя. Справочник Номенклатура с реквизитами Артикул, Наименование и Справочник Контрагенты. И документ Коммерческое предложение. Все. А нуда - обработка Загрузка прайса.
   am_bubnov
 
39 - 27.12.12 - 23:40
Попробуй заменить в запросе "подобно" на два условия: Артикул >= "карандащ М артикул 1234" И Артикул < "карандащ М артикул 1234я". Мне так реально помогло на больших базах.
   Bober
 
40 - 27.12.12 - 23:49
(39) хороший вариант
   Serg_1960
 
41 - 28.12.12 - 01:33
Зачем "подобно" или "подстрока"? Если у автора в заявке артикул из четырех символов, то в справочник добавь реквизит для поиска, содержащий четыре символа артикула и запрос на равно по этому реквизиту. Если в заявке может быть артикул пятью символами указан - еще один реквизит для поиска... и запрос к тому или иному реквизиту в зависимости от длины артикула в заявке.
   КонецЦикла
 
42 - 28.12.12 - 01:43
(30) Т.е. покупателю все равно?
Ну так может автоматизировать это дело?
Выбирать первое совпадающее?
Или менеджер, сплевывая через левое плечо, выбирает то первый товар, то второй?
На что он тратит свое время?
Поразгонять вас нужно всех...
   КонецЦикла
 
43 - 28.12.12 - 01:44
1,5 млн. записей при наличии индексов - не проблема
   ВопросыЗадающий
 
44 - 28.12.12 - 01:55
попробуй клиент-серверный вариант, посмотри насколько быстрее будет работать
   sanja26
 
45 - 28.12.12 - 04:00
Не читал. забацай регистр, проиндексируй. но по вхождению подстроки реально врядля как-то можно улучшить
   el-gamberro
 
46 - 28.12.12 - 04:18
(41) Кстати достаточно интересный вариант, учитывая, что ограничений на скорость запись в базу нет. Именно так устроен ОЛАП.
   aspirant
 
47 - 28.12.12 - 07:35
(44) Клиент серверный на SQL уже после нового года с товарищем будем пробовать. Сейчас уже времени нет. Пока удалось только выяснить, что на 2-х ядерном старом проце (десктоппе) заявка грузится процентов на 20-40% быстрее, чем на мощном ноуте (4-х ядерном).
   aspirant
 
48 - 28.12.12 - 07:37
(41) Сейчас заказчик получил некую смесь методов - сначала (в течение 10 секунд подбирается большая часть товаров по полному соответствию артикулов, а потом если что-то не нашлось по условию "=", то начинает работать цикл с запросом "подобно". Вместо 1ч10мин получил 10 минут. ПОка неплохо. Буду смотреть в сторону (41) - усеченных артикулов.
   aspirant
 
49 - 28.12.12 - 07:39
(45) регистр не помог.
 
 Рекламное место пустует
   aspirant
 
50 - 28.12.12 - 07:43
(43) ну если заявка из 400-500 строк грузится 1ч10мин, то для Вас это может быть и не проблема. "=" по сравнению с "подобно" примерно в 280 раз быстрее. Вот и надо получить скорость примерно как "=", а удобство, как "подобно". Если для Вас не проблема - посоветуйте решение.
   wms
 
51 - 28.12.12 - 10:02
(26)она что файловая? конечно на скуль и функцию поиска на сервер вынести
   Serg_1960
 
52 - 28.12.12 - 10:02
Советовать - не самому делать. Советую :)

Делаю регистр сведений с "АртикулЗаявки" (четыре символа артикула номенклатуры), "Приоритет" (число, например, статистика использования в заявках) и "Номенклатура" (ссылка на справочник).

Собираю в ТЗ значения из заявки покупателя и всё это в запрос. Единым запросом получаю все нужные значения для заполнения ТЧ документа.

Проблему (когда по артикулу заявки есть несколько позиций в справочнике) - игнорирую - это не мои проблемы :)

Решаю так (если обработка заявок покупателей - регалментная):
Пишу в ТЧ все найденные позиции, но: первая позиция - заполняю поля ТЧ полностью, "как положено". Остальные "аналоги" (сортированные по приоритету) - пишу следом, но без суммовых значений. Смысл?
Эта группа строк - для "отложенного" выбора нужной строки юзверу. Как?
Обработка ТЧ "Выбрать текущую строку из группы аналогичных" помогает юзверу сделать выбор. Как?
Используя текущую строку, выбираю все строки "группы аналогичных". "Группа" - это строки выше до позиции с ценой больше нуля(включая) и строки ниже до позиции с ценой больше нуля(исключая). Удаляю все строки "группы" кроме текущей. В текущую строку подставляю суммовые значения из первой строки "группы".

Типа как-то так.
   hhhh
 
53 - 28.12.12 - 10:03
(50) а у поля артикул точно стоит флажок индексирования, и в номенклатуре и в регистре?
   Reset
 
54 - 28.12.12 - 10:03
(17) Позволяет. Нужно руками прописать произвольное условие или вовсе рукам в тексте.
   wms
 
55 - 28.12.12 - 10:04
если простая самописка можно вообще на несколько однотипных справочников разделить типа артикулы с 1 по 5 в одной таблице остальные в др. ну это если др. средства не помогут.
еще прямые запросы если скуль на 8-ке не писал, на 7.7 помогало
   Reset
 
56 - 28.12.12 - 10:06
+ к (17) Я бы наверное от балды бы не стал писать
   Reset
 
57 - 28.12.12 - 10:09
(ТС) Если избавишь от цикличного запроса, это даст существенное ускорение, даже при использовании ПОДОБНО.
Не в 400 раз конечно, но, возможно, в десятки.
Если результат будет не устраивать, толга придется думать а различных вариантах вспомогательных полей/таблиц специлаьно под быстрый поиск. Вариантов миллион, выбирать нужно, зная точно местные условия
   aspirant
 
58 - 28.12.12 - 10:12
(52) я наверное сам виноват, что не могу нормально изложить вопрос. Вопрос мой - не методологический, вопрос мой - технический. Потому что все ньюансы я здесь не опишу - это будет томик Пушкина. У меня например будут сложности с созданием коротких артикулов для поиска - в прайсе могут быть R123fa а в заявке 123f. Сегодня ночером выяснил. Т.е. вообще остается по подстроке. Коротких артикулов я не нарежу.
   aspirant
 
59 - 28.12.12 - 10:13
(57) от цикличного запроса на прямое соответствие я уже избавился - разом выбирается процентов 60-80% товаров. Остальное - циклом с запросом Подобно.
(56) А сам пробовал?
   Reset
 
60 - 28.12.12 - 10:14
(59) "А ты сам пробовал?"
Ппц
   Reset
 
61 - 28.12.12 - 10:15
Я еще должен доказать что я не верблюд
   Reset
 
62 - 28.12.12 - 10:15
Как хочешь
   acsent
 
63 - 28.12.12 - 10:16
если по первым буквам искать то индекс работает, если по вхождению, то смотреть в сторону полнотекстового индекса
   Reset
 
64 - 28.12.12 - 10:18
(63) Про полнотекстовый поиск кстати хорошая альтернативная идея, без изобретания собственных колес
   Serg_1960
 
65 - 28.12.12 - 10:31
(офф) Честно говоря я в шоке от "заявка из 400-500 строк грузится 1ч10мин" :( Не понимаю, хоть убейте. Они там что забыли комп включить чтоли? :))
Я документы инвентаризации заполнял на две-три тысячи позиций (источник - файл dbf; соответствие - нечеткий поиск по наименованию с помощью StrMatch) за пару-тройку минут...
   aspirant
 
66 - 28.12.12 - 10:32
(55) я не умею прямые запросы делать.
   Hmster
 
67 - 28.12.12 - 10:32
А нельзя динамически формировать запрос?
Единственное придется учитывать превышение 256 таблиц.
ВЫБРАТЬ
&Артикул_1 КАК АртикулЗаявка,
СпрНом.Артикул,
СпрНом.Ссылка КАК Номенклатура
ИЗ Справочник.Номенклатура КАК СпрНом
ГДЕ &Артикул = ПОДСТРОКА(СпрНом.Артикул,1,<КоличествоЗнаков>)
   aspirant
 
68 - 28.12.12 - 10:33
(65) поиск по базе с каким ассортиментом был?
   Hmster
 
69 - 28.12.12 - 10:33
в запросе ошибка
   aspirant
 
70 - 28.12.12 - 10:35
(67) не, я не знаю
ПОДСТРОКА(СпрНом.Артикул,1,<КоличествоЗнаков>) - с единицы ли резать или может быть со второго знака, а может быть с третьего...
   Axel2009
 
71 - 28.12.12 - 10:37
(39)(40) это аналог запроса 
Артикул ПОДОБНО "карандащ М артикул 1234%"
   Йохохо
 
72 - 28.12.12 - 10:38
(63) это как он работает? по какому индексу?
(58) заполняй а ля НоменклатураКонтрагентов
   Axel2009
 
73 - 28.12.12 - 10:43
(3) а номенклатуру то какую в итоге в заявке укажешь по данному примеру?
   aspirant
 
74 - 28.12.12 - 10:45
(65) да и какая разница с какого источника грузить - я с экселя за 15 секунд все 500 позиций считал - а потом чисто поиск и подстановка
   aspirant
 
75 - 28.12.12 - 10:45
(73) раньше первую попавшуюся, теперь - на выбор менеджеру.
   Hmster
 
76 - 28.12.12 - 10:46
замени на подобно
в чем проблема
Главное запрос будет выполняться не 500 раз а 2 допустим.
а вообще это как-то странно. выбор ведь должен идти с начала или я ошибаюсь?
   Hmster
 
77 - 28.12.12 - 10:48
какая длина поля АРТИКУЛ ?
   aspirant
 
78 - 28.12.12 - 10:49
(76) про "выбор сначала" не совсем понял
   aspirant
 
79 - 28.12.12 - 10:49
(77) в прайсах длина от 7 до 20 знаков
   Hmster
 
80 - 28.12.12 - 10:49
попробуй зайти в конфигуратор и проиндексировать БД.
   Hmster
 
81 - 28.12.12 - 10:50
пробовал формировать динамически один большой запрос вместо кучи небольших ???
   Reset
 
82 - 28.12.12 - 10:55
(81) Предлагаешь делать запрос
Выбрать чтото
из чегото
Где чтотоПодобно &Пар1
Объединить

Выбрать чтото
из чегото
Где чтотоПодобно &Пар2
Объединить
....
Выбрать чтото
из чегото
Где чтотоПодобно &Пар400
Объединить

Офигеть. Дайте две. Нет, Четыреста
   Axel2009
 
83 - 28.12.12 - 10:56
(0) а вообще диски поставь другие. у нас поиск на подобно серии на 150 позиций по 3 млн серий выполняется секунд 30..
   Axel2009
 
84 - 28.12.12 - 10:57
(81) в данном случае не поможет я думаю, потому как основной затык не в скорости ответа по каждому запросу.
   Serg_1960
 
85 - 28.12.12 - 10:57
"в прайсе могут быть R123fa а в заявке 123f."(тс)
   Axel2009
 
86 - 28.12.12 - 10:58
(84)+ причем поиск осуществляется не по одной колонке в excel, а по 10
   Hmster
 
87 - 28.12.12 - 11:03
Не попробуешь не узнаешь
   aspirant
 
88 - 28.12.12 - 11:11
(80) да база то нулевая - я в пустую базу гружу пару прайсов по 600 000 позиций и несколько по 100 000, и после этого пытаюсь заявку загрузить. И все...
   Hmster
 
89 - 28.12.12 - 11:13
Сложно зайти в конфигуратор и переиндексировать БД?
может у тебя индексы кривые?
   aspirant
 
90 - 28.12.12 - 11:28
(89) да почему кривые то с чего? индексирую уже...
   am_bubnov
 
91 - 28.12.12 - 11:28
(89) Индексирование здесь не поможет. При поиске "подобно" внутри строки происходит скан таблицы, индекс не используется.



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует