|
Справочник с 1,5 млн записей - ускорить поиск | ☑ | ||
---|---|---|---|---|
0
aspirant
27.12.12
✎
17:41
|
Привет всем! Выручайте - я совершенно не силен в вопросах ускорения:
есть справочник с около 1,5 записей - товары. У них оригинальные артикулы. Остальное (названия) могу быть совпадающими. Заявки от клиентов приходят в электронном виде в свободной форме. Позиций в заявках - от 100 до 1000. Так вот вопрос: как лучше поиск вести по справочнику - по вхождению подстроки (номер в заявке клиента) в артикул номенклутары, или регистр забацать с содержанием артикулов - что быстрее работает? |
|||
1
zak555
27.12.12
✎
17:42
|
Карандаш М артикул 1
Карандаш М артикул 2 Карандаш М артикул 3 Карандаш М артикул 4 ? |
|||
2
Reset
27.12.12
✎
17:45
|
В смысле ты собираешься забацать регистр со всеми вариантами подстрок артикулов? тогда да, быстрее.
Иначе какая разница в какой таблице искать. |
|||
3
aspirant
27.12.12
✎
17:45
|
да, примерно так. Но точнее вот так:
Карандаш М артикул 1234111 Карандаш М артикул 1234112 Карандаш М артикул 1234101 в заявке клиента будет карандащ М артикул 1234 |
|||
4
acsent
27.12.12
✎
17:47
|
а не проще ли полностью артикул набирать?
|
|||
5
Reset
27.12.12
✎
17:47
|
Если вынести 1234111 в отдельный инлексированный реквизит или в регистр "соответсвий" то посик будет быстрее
|
|||
6
aspirant
27.12.12
✎
17:47
|
да нет, наверное в моем случае "какая разница в какой таблице"
|
|||
7
Reset
27.12.12
✎
17:48
|
а, недочитал.
Если у клиента 1234 то нет смысла - все равно подобно придется использовать |
|||
8
FIXXXL
27.12.12
✎
17:48
|
сделать унифицированную форму заявки с кодом товара
смотри в сторону РС НоменклатураКонтрагентов |
|||
9
aspirant
27.12.12
✎
17:50
|
(5) индексированные реквизиты помогли. Но когда база достигла 1,5 млн и они уже не помогают. Одна заявка от 17 до 60 минут грузится на виртуальном диске в РАМ памяти, процы под 100% (ну 25%)
|
|||
10
aspirant
27.12.12
✎
17:53
|
Я к сожалению 400 раз обращаюсь с запросом подобно %артикул%. А как сделать чтоб сразу отобрать (в запрос передать перечень подстрок-артикулов)?
|
|||
11
Reset
27.12.12
✎
17:53
|
(10) :) Передать параметром таблицу
|
|||
12
Reset
27.12.12
✎
17:54
|
Потом ее содинить со спр через подобно
|
|||
13
aspirant
27.12.12
✎
17:55
|
(12) пробую! Спасибо!
|
|||
14
Reset
27.12.12
✎
17:57
|
т.е всесто Где Спр.Артикул Подобно &Параметр
Выбрать Таб.ПодАртикул Поместить Заявка из &Таб Как Таб; Выбрать Спр.Ссылка внутренее соединение Таб по Спр.Артикул Подобно Таб.ПодАртикул Честно говоря, я думал что и сделано) |
|||
15
Reset
27.12.12
✎
17:58
|
что так и сделано*
|
|||
16
Reset
27.12.12
✎
17:58
|
поправил
Выбрать Таб.ПодАртикул Поместить Заявка из &Таб Как Таб; Выбрать Спр.Ссылка внутренее соединение Заявка по Спр.Артикул Подобно Заявка.ПодАртикул |
|||
17
aspirant
27.12.12
✎
18:01
|
не дает связать по ПОДОБНО, только равно
|
|||
18
wms
27.12.12
✎
18:03
|
на форме зачем искать?
заполнение таб.части в заказ- пишется обработка и запросом |
|||
19
wms
27.12.12
✎
18:04
|
артикул в списке разве не быстро?
|
|||
20
aspirant
27.12.12
✎
18:05
|
(18) не, я на форме тока из файла ексель читаю, потом таблицу с артикулами на сервер передал, а там уже 400 раз запрос через %подобно" сделал. Прошу не чморить. Но не знаю как.
|
|||
21
wms
27.12.12
✎
18:06
|
ВЫБРАТЬ
Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Артикул В(&СписокАртикулов) |
|||
22
aspirant
27.12.12
✎
18:07
|
(21) артикулы не полностью совпадают. - на 80-90% только совпадают.
|
|||
23
Йохохо
27.12.12
✎
18:09
|
так и сделай, выбери и проиндексируй Артикул как Строка(4) и потом на равенство
должен быть выигрыш, т.к. = сильно быстрее |
|||
24
wms
27.12.12
✎
18:10
|
если начало совпадает то мож так поможет:
ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ ПОДСТРОКА(Номенклатура.Артикул, 1, 4) = &подстрАртикула |
|||
25
aspirant
27.12.12
✎
18:12
|
(23)(24) спасибо за идеи. Как же в списке когда находишься - жмешь найти (УФ) вводишь подстроку и через 10-15 секунд уже список из 10 товаров на морде высветился. Меня бы устроило.
|
|||
26
aspirant
27.12.12
✎
18:15
|
База то всего ничего - 300 метров. Самописка из 2 справочников. Для выписки счетов. Может ее на SQL перенести? КОличество транзакций на запись в ней - фиг да нифига, а вот чтение - напряги...
|
|||
27
ILM
гуру
27.12.12
✎
19:29
|
Проанализируй продажи. Весь товар продается неравномерно. Создай индекс по продаваемости товара. Тот что чаще берут выводи первым в поиске и ссылайся в заказах на него. В 98% случаях будете попадать куда нужно, а 2% погрешность ввода - вам простят. Главное чтобы товар был на складе или для заказа у поставщика.
Если заявки ваших клиентов будут удовлетворяться на 90-95%, а не на 60-80, то и продажи возрастут. |
|||
28
ILM
гуру
27.12.12
✎
19:32
|
Как еще один вариант, выбрать подстрок(наименования) + ссылку во временную таблицу и проиндексировать подстроку. Для поиска использовать именно её, а потом подтягивать ссылки и остатки.
|
|||
29
КонецЦикла
27.12.12
✎
19:44
|
Феерично, связывать таблицы по Подобно
Может нужно в консерватории (заказах) артикулы подправить? Ну, допустим, артикул набранный клиентом, подобен трем товарам - какие действия автора? Сначала задачу нужно решить в уме, а потом уже написать код. |
|||
30
aspirant
27.12.12
✎
21:34
|
(29) такие случаи есть, в таком случае менеджеру предоставляется право выбора из 3 товаров. Выводится окно со списком найденных товаров и менеджер тыкает нужный.
|
|||
31
aspirant
27.12.12
✎
21:35
|
(29) про феерию знаю, потому и пытаюсь уйти от нее. А про "решить в уме" - так здесь уже на логику нет задачек, вопрос "как быстрее найти 500 подстрок".
|
|||
32
Bober
27.12.12
✎
21:43
|
(0) решания два
1. Клиент шлет заказы в артикулах фирмы, поиск идет на = 2. Решение через полнотекстовый поиск Ps самый лучший для фирмы, это сделать веб-морду к этой конфе и пусть клиенты сами делают заказы |
|||
33
aspirant
27.12.12
✎
21:56
|
(32) ну видимо у Вас такая задача была. Так и идем к вебморде. Это финал будет. Но сейчас старт только.Хотят сами мочить заявки.
|
|||
34
Armando
27.12.12
✎
21:58
|
Я за полнотекстовый поиск
|
|||
35
aspirant
27.12.12
✎
22:07
|
полнотекстовый, это = или подобно? я уже туплю
|
|||
36
Рамиль Маугли
27.12.12
✎
22:14
|
Какая конфигурация то ?
|
|||
37
Armando
27.12.12
✎
22:19
|
||||
38
aspirant
27.12.12
✎
22:26
|
(36) Моя. Справочник Номенклатура с реквизитами Артикул, Наименование и Справочник Контрагенты. И документ Коммерческое предложение. Все. А нуда - обработка Загрузка прайса.
|
|||
39
am_bubnov
27.12.12
✎
23:40
|
Попробуй заменить в запросе "подобно" на два условия: Артикул >= "карандащ М артикул 1234" И Артикул < "карандащ М артикул 1234я". Мне так реально помогло на больших базах.
|
|||
40
Bober
27.12.12
✎
23:49
|
(39) хороший вариант
|
|||
41
Serg_1960
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
|
попробуй клиент-серверный вариант, посмотри насколько быстрее будет работать
|
|||
45
sanja26
28.12.12
✎
04:00
|
Не читал. забацай регистр, проиндексируй. но по вхождению подстроки реально врядля как-то можно улучшить
|
|||
46
el-gamberro
28.12.12
✎
04:18
|
(41) Кстати достаточно интересный вариант, учитывая, что ограничений на скорость запись в базу нет. Именно так устроен ОЛАП.
|
|||
47
aspirant
28.12.12
✎
07:35
|
(44) Клиент серверный на SQL уже после нового года с товарищем будем пробовать. Сейчас уже времени нет. Пока удалось только выяснить, что на 2-х ядерном старом проце (десктоппе) заявка грузится процентов на 20-40% быстрее, чем на мощном ноуте (4-х ядерном).
|
|||
48
aspirant
28.12.12
✎
07:37
|
(41) Сейчас заказчик получил некую смесь методов - сначала (в течение 10 секунд подбирается большая часть товаров по полному соответствию артикулов, а потом если что-то не нашлось по условию "=", то начинает работать цикл с запросом "подобно". Вместо 1ч10мин получил 10 минут. ПОка неплохо. Буду смотреть в сторону (41) - усеченных артикулов.
|
|||
49
aspirant
28.12.12
✎
07:39
|
(45) регистр не помог.
|
|||
50
aspirant
28.12.12
✎
07:43
|
(43) ну если заявка из 400-500 строк грузится 1ч10мин, то для Вас это может быть и не проблема. "=" по сравнению с "подобно" примерно в 280 раз быстрее. Вот и надо получить скорость примерно как "=", а удобство, как "подобно". Если для Вас не проблема - посоветуйте решение.
|
|||
51
wms
28.12.12
✎
10:02
|
(26)она что файловая? конечно на скуль и функцию поиска на сервер вынести
|
|||
52
Serg_1960
28.12.12
✎
10:02
|
Советовать - не самому делать. Советую :)
Делаю регистр сведений с "АртикулЗаявки" (четыре символа артикула номенклатуры), "Приоритет" (число, например, статистика использования в заявках) и "Номенклатура" (ссылка на справочник). Собираю в ТЗ значения из заявки покупателя и всё это в запрос. Единым запросом получаю все нужные значения для заполнения ТЧ документа. Проблему (когда по артикулу заявки есть несколько позиций в справочнике) - игнорирую - это не мои проблемы :) Решаю так (если обработка заявок покупателей - регалментная): Пишу в ТЧ все найденные позиции, но: первая позиция - заполняю поля ТЧ полностью, "как положено". Остальные "аналоги" (сортированные по приоритету) - пишу следом, но без суммовых значений. Смысл? Эта группа строк - для "отложенного" выбора нужной строки юзверу. Как? Обработка ТЧ "Выбрать текущую строку из группы аналогичных" помогает юзверу сделать выбор. Как? Используя текущую строку, выбираю все строки "группы аналогичных". "Группа" - это строки выше до позиции с ценой больше нуля(включая) и строки ниже до позиции с ценой больше нуля(исключая). Удаляю все строки "группы" кроме текущей. В текущую строку подставляю суммовые значения из первой строки "группы". Типа как-то так. |
|||
53
hhhh
28.12.12
✎
10:03
|
(50) а у поля артикул точно стоит флажок индексирования, и в номенклатуре и в регистре?
|
|||
54
Reset
28.12.12
✎
10:03
|
(17) Позволяет. Нужно руками прописать произвольное условие или вовсе рукам в тексте.
|
|||
55
wms
28.12.12
✎
10:04
|
если простая самописка можно вообще на несколько однотипных справочников разделить типа артикулы с 1 по 5 в одной таблице остальные в др. ну это если др. средства не помогут.
еще прямые запросы если скуль на 8-ке не писал, на 7.7 помогало |
|||
56
Reset
28.12.12
✎
10:06
|
+ к (17) Я бы наверное от балды бы не стал писать
|
|||
57
Reset
28.12.12
✎
10:09
|
(ТС) Если избавишь от цикличного запроса, это даст существенное ускорение, даже при использовании ПОДОБНО.
Не в 400 раз конечно, но, возможно, в десятки. Если результат будет не устраивать, толга придется думать а различных вариантах вспомогательных полей/таблиц специлаьно под быстрый поиск. Вариантов миллион, выбирать нужно, зная точно местные условия |
|||
58
aspirant
28.12.12
✎
10:12
|
(52) я наверное сам виноват, что не могу нормально изложить вопрос. Вопрос мой - не методологический, вопрос мой - технический. Потому что все ньюансы я здесь не опишу - это будет томик Пушкина. У меня например будут сложности с созданием коротких артикулов для поиска - в прайсе могут быть R123fa а в заявке 123f. Сегодня ночером выяснил. Т.е. вообще остается по подстроке. Коротких артикулов я не нарежу.
|
|||
59
aspirant
28.12.12
✎
10:13
|
(57) от цикличного запроса на прямое соответствие я уже избавился - разом выбирается процентов 60-80% товаров. Остальное - циклом с запросом Подобно.
(56) А сам пробовал? |
|||
60
Reset
28.12.12
✎
10:14
|
(59) "А ты сам пробовал?"
Ппц |
|||
61
Reset
28.12.12
✎
10:15
|
Я еще должен доказать что я не верблюд
|
|||
62
Reset
28.12.12
✎
10:15
|
Как хочешь
|
|||
63
acsent
28.12.12
✎
10:16
|
если по первым буквам искать то индекс работает, если по вхождению, то смотреть в сторону полнотекстового индекса
|
|||
64
Reset
28.12.12
✎
10:18
|
(63) Про полнотекстовый поиск кстати хорошая альтернативная идея, без изобретания собственных колес
|
|||
65
Serg_1960
28.12.12
✎
10:31
|
(офф) Честно говоря я в шоке от "заявка из 400-500 строк грузится 1ч10мин" :( Не понимаю, хоть убейте. Они там что забыли комп включить чтоли? :))
Я документы инвентаризации заполнял на две-три тысячи позиций (источник - файл dbf; соответствие - нечеткий поиск по наименованию с помощью StrMatch) за пару-тройку минут... |
|||
66
aspirant
28.12.12
✎
10:32
|
(55) я не умею прямые запросы делать.
|
|||
67
Hmster
28.12.12
✎
10:32
|
А нельзя динамически формировать запрос?
Единственное придется учитывать превышение 256 таблиц. ВЫБРАТЬ &Артикул_1 КАК АртикулЗаявка, СпрНом.Артикул, СпрНом.Ссылка КАК Номенклатура ИЗ Справочник.Номенклатура КАК СпрНом ГДЕ &Артикул = ПОДСТРОКА(СпрНом.Артикул,1,<КоличествоЗнаков>) |
|||
68
aspirant
28.12.12
✎
10:33
|
(65) поиск по базе с каким ассортиментом был?
|
|||
69
Hmster
28.12.12
✎
10:33
|
в запросе ошибка
|
|||
70
aspirant
28.12.12
✎
10:35
|
(67) не, я не знаю
ПОДСТРОКА(СпрНом.Артикул,1,<КоличествоЗнаков>) - с единицы ли резать или может быть со второго знака, а может быть с третьего... |
|||
71
Axel2009
28.12.12
✎
10:37
|
(39)(40) это аналог запроса
Артикул ПОДОБНО "карандащ М артикул 1234%" |
|||
72
Йохохо
28.12.12
✎
10:38
|
(63) это как он работает? по какому индексу?
(58) заполняй а ля НоменклатураКонтрагентов |
|||
73
Axel2009
28.12.12
✎
10:43
|
(3) а номенклатуру то какую в итоге в заявке укажешь по данному примеру?
|
|||
74
aspirant
28.12.12
✎
10:45
|
(65) да и какая разница с какого источника грузить - я с экселя за 15 секунд все 500 позиций считал - а потом чисто поиск и подстановка
|
|||
75
aspirant
28.12.12
✎
10:45
|
(73) раньше первую попавшуюся, теперь - на выбор менеджеру.
|
|||
76
Hmster
28.12.12
✎
10:46
|
замени на подобно
в чем проблема Главное запрос будет выполняться не 500 раз а 2 допустим. а вообще это как-то странно. выбор ведь должен идти с начала или я ошибаюсь? |
|||
77
Hmster
28.12.12
✎
10:48
|
какая длина поля АРТИКУЛ ?
|
|||
78
aspirant
28.12.12
✎
10:49
|
(76) про "выбор сначала" не совсем понял
|
|||
79
aspirant
28.12.12
✎
10:49
|
(77) в прайсах длина от 7 до 20 знаков
|
|||
80
Hmster
28.12.12
✎
10:49
|
попробуй зайти в конфигуратор и проиндексировать БД.
|
|||
81
Hmster
28.12.12
✎
10:50
|
пробовал формировать динамически один большой запрос вместо кучи небольших ???
|
|||
82
Reset
28.12.12
✎
10:55
|
(81) Предлагаешь делать запрос
Выбрать чтото из чегото Где чтотоПодобно &Пар1 Объединить Выбрать чтото из чегото Где чтотоПодобно &Пар2 Объединить .... Выбрать чтото из чегото Где чтотоПодобно &Пар400 Объединить Офигеть. Дайте две. Нет, Четыреста |
|||
83
Axel2009
28.12.12
✎
10:56
|
(0) а вообще диски поставь другие. у нас поиск на подобно серии на 150 позиций по 3 млн серий выполняется секунд 30..
|
|||
84
Axel2009
28.12.12
✎
10:57
|
(81) в данном случае не поможет я думаю, потому как основной затык не в скорости ответа по каждому запросу.
|
|||
85
Serg_1960
28.12.12
✎
10:57
|
"в прайсе могут быть R123fa а в заявке 123f."(тс)
|
|||
86
Axel2009
28.12.12
✎
10:58
|
(84)+ причем поиск осуществляется не по одной колонке в excel, а по 10
|
|||
87
Hmster
28.12.12
✎
11:03
|
Не попробуешь не узнаешь
|
|||
88
aspirant
28.12.12
✎
11:11
|
(80) да база то нулевая - я в пустую базу гружу пару прайсов по 600 000 позиций и несколько по 100 000, и после этого пытаюсь заявку загрузить. И все...
|
|||
89
Hmster
28.12.12
✎
11:13
|
Сложно зайти в конфигуратор и переиндексировать БД?
может у тебя индексы кривые? |
|||
90
aspirant
28.12.12
✎
11:28
|
(89) да почему кривые то с чего? индексирую уже...
|
|||
91
am_bubnov
28.12.12
✎
11:28
|
(89) Индексирование здесь не поможет. При поиске "подобно" внутри строки происходит скан таблицы, индекс не используется.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |