Имя: Пароль:
1C
 
индексация - все нюансы
0 ASimonova
 
26.07.23
15:45
1С:Предприятие 8.3

вот что написано везде:
ВЫБРАТЬ … ИЗ … ГДЕ <условие>
СОЕДИНЕНИЕ … ПО <условие>
ВЫБРАТЬ … ИЗ <ВиртуальнаяТаблица>(, <условие>)
ИМЕЮЩИЕ <условие>
Для каждого условия должен существовать подходящий индекс. Подходящим является индекс, удовлетворяющий следующим требованиям:
1) Индекс содержит все поля перечисленные в условии;
2) Эти поля находятся в самом начале индекса;
3) Эти поля идут подряд, то есть между ними не «вклиниваются» поля, не участвующие в условии запроса

Самое непонятное - что значит п.3 и как его совместить с п.2? У меня есть временная таблица ВТТекущая, из ее 10 полей в условиях как сверху используются штук 8. При чем в одной ВТ условие ГДЕ выглядит как
ВТТекущая.Поле1 = ХХХ И ВТТекущая.Поле2 = YYY И Поле4..., потом в соединениях что-нибудь типа ВТТекущая.Поле1 = ВТДругая.ХХХ И ВТТекущая.Поле3 = ВТДругая.YYY И Поле2... И Поле7..., потом еще в ИМЕЮЩИЕ какое-нибудь Поле2, и как их расположить? Предполагаю, что будет
ИНДЕКСИРОВАТЬ ПО
Поле1,
Поле2,
Поле4,
Поле1,
Поле3,
Поле2,
Поле7

Даже если предположить, что имеется ввиду это, то что тогда значит п.2? Если я сделаю так, то ВСЕ поля никак не могут быть в начале индекса.
Кто-нибудь знает ТОЧНО как это работает?
1 СвинТуз
 
26.07.23
15:53
Было время. Открыл idx файл в hex и сам все разглядел.

Теперь наглядности нет. А книги не для всех.
2 СвинТуз
 
26.07.23
15:55
Или там 29-й байт об колено открыв dbf как текст.

Сделал свое дело, вернул на место заголовок таблицы и сказал, что так и было.
3 ASimonova
 
26.07.23
15:57
(1) может вы даже знаете какую-то конкретную книгу, которая может помочь?
4 СвинТуз
 
26.07.23
15:58
Раньше на собеседовании гулял вопрос про первые 4 принципа нормализации таблиц.
Весело было.
5 mikecool
 
26.07.23
15:59
(0) а что не понятно в написанном?
лучший вариант, когда условие по поле1, поле2, поле3
и индекс такой же: поле1, поле2, поле3
хуже, когда условие на поле1, поле3
6 СвинТуз
 
26.07.23
16:00
(3)


)))

https://xn----itbbbjleimcldc5b.xn--p1ai/index.php?route=product/product&product_id=22588

Попов А.А., FoxPro 2.5/2.6. Создание приложений для FoxPro 2.5/2.6 в DOS и Windows, Учебное пособие. В книге дается техника программирования, средства и принципы формирования интерфейса приложения, надежность систем обработки данных...
7 H A D G E H O G s
 
26.07.23
16:00
Представьте заголовок книги

1. Косметика - страница 1
1.1 Женская - страница 2
1.2 Мужская - страница 3
1.3 Прочее - страница 4
2. Обувь - страница 6
2.1 Женская - страница 8
2.2 Мужская - страница 11
2.3 Прочее - страница 14

Найдите мне Женская

Пример хреновый, но смысл проглядывается.
8 СвинТуз
 
26.07.23
16:01
(0)
Нужно забыть про 1с и почитать про индексы в целом
9 ASimonova
 
26.07.23
16:03
(8) хорошо, спасибо
10 СвинТуз
 
26.07.23
16:04
(9)

Консультант наверное? За 7+ лет не понять как индекс строится.
11 H A D G E H O G s
 
26.07.23
16:04
(0)
"Даже если предположить, что имеется ввиду это, то что тогда значит п.2? Если я сделаю так, то ВСЕ поля никак не могут быть в начале индекса. "
"Если я сделаю так, то ВСЕ поля никак не могут быть в начале индекса. " - сделайте несколько индексов с разными последовательностями полей.
12 ASimonova
 
26.07.23
16:05
(10) нет
13 mikecool
 
26.07.23
16:06
(11) а как это будет в запросе? несколько одинаковых времянок с разным индексированием?
14 H A D G E H O G s
 
26.07.23
16:06
(11) Чтобы искать по "Женская" - будет второе оглавление
1. Женская- страница 1
1.1 Косметика- страница 2
1.2 Обувь - страница 3
2. Мужская- страница 6
2.1 Косметика- страница 8
2.2 Обувь - страница 11
15 H A D G E H O G s
 
26.07.23
16:07
(13) Времянки (в 99%) индексировать не надо, я уже писал про это.
16 mikecool
 
26.07.23
16:08
(15) ты же понимаешь, что уходишь от рекомендаций вендора? )
17 mistеr
 
26.07.23
16:11
(0) Для временных таблиц эти правила не столь актуальны
18 ASimonova
 
26.07.23
16:11
(15) О_О а для чего же они нужны???
19 СвинТуз
 
26.07.23
16:12
(0)
Я лекции читать не умею.
Делаю это плохо.

Короче.

Есть таблица с полями 1, 2

1. 1= "21", 2 = "43"
2. 1 = "56", 2 = "31"
3. 1 = "12", 2 = "12"

Есть индекс 1+2

Примерное содержание файла индекса

1. "1212" номер строки 3
2. "2143" ---- 1
3. "5631" ---- 2

И далее по рашмор или проще говоря деление пополам ищем записи.

Понятно что при поиске по полю 2 полный голяк. Нужен другой индекс.

Как то так скомкано ....
20 H A D G E H O G s
 
26.07.23
16:12
(18) Чтобы индексировать справочники, документы, регистры
21 Мультук
 
26.07.23
16:13
(0)

P.S.

>> Для каждого условия должен существовать подходящий индекс.

Кому должен ?
Прямо вот должен ?

Для условия

   ссылка.Проведен = Истина

тоже должен существовать отдельный индекс в вакууме ?
22 H A D G E H O G s
 
26.07.23
16:15
(21) Смех смехом, но было бы неплохо добавить поле "Проведен" в стандартные некластерные индексы.
23 СвинТуз
 
26.07.23
16:16
(16)

Белоусов учит на специалиста.
Делает выборку из документов Реализации и тут же ее индексирует.

Я ему в чат: "Зачем маэстро? В большем количестве случаев там будет одна запись."

Но профессионала не вылечить )))

И ему сдавать? Старый лис разложил грабли и ловит новичков.
Скучно и не интересно.
24 mistеr
 
26.07.23
16:17
(0) Попробую объяснить п.3 на примере регистра сведений.

Есть индекс Период + Регистратор + НомерСтроки.
Делаем выборку по регистратору. П.1 выполняется, п.2 нарушается, по периоду нет условия.
Но есть еще индекс Регистратор + НомерСтроки. Тут все выполняется.

Делаем выборку по периоду и по номеру строки. П. 1,2 выполняются, п.3 нарушается, по регистратору нет условия.
25 СвинТуз
 
26.07.23
16:18
(22)
Регистры накопления для боящихся трудностей?
26 mistеr
 
26.07.23
16:18
(22) Это для любителей строить отчеты по документам?
27 СвинТуз
 
26.07.23
16:19
(22)
Движения могут быть и не у проведенного документа ...
28 ASimonova
 
26.07.23
16:19
(19) это как раз понятно, теорию мне объясняли. я не понимаю что как раз делать, если я хочу чтобы в моей таблице было два индекса: и 1+2 и отдельно 2. и может быть отдельно 1+2+3, как угодно. в запросе.
29 СвинТуз
 
26.07.23
16:20
Документу может быть запрещено проведение, а движения у него будут.
30 ASimonova
 
26.07.23
16:20
(20) я точно знаю что кто-то умудрялся индексацией по ВТ улучшать производительность в сотни раз. как раз такую историю нам недавно на работе поставили в пример и сказали учиться. пытаюсь найти как это сделать...
31 СвинТуз
 
26.07.23
16:21
(28)
Это смотря какая таблица.
И что 1 и что 2.

Теорию 1с надо смотреть.
32 mikecool
 
26.07.23
16:21
(23) как мне кто-то в ответ на похожий вопрос ответил - это ты знаешь, что там 1 запись, а если в будущем что-то поменяется и будет более 1?
33 mistеr
 
26.07.23
16:21
(28) Для случая "как угодно" придумали агрегаты
34 СвинТуз
 
26.07.23
16:23
(32)
Га-но отмазка.

До довольно большого количества идет перебор. Индекс игнорится.
35 ASimonova
 
26.07.23
16:23
(31) хорошо, я сейчас перечитаю общую теорию по индексам, а есть пример книжки, в которой есть теория по индексам для 1с?
36 СвинТуз
 
26.07.23
16:25
(35)
На ИТС есть.
Структура таблиц разбирается и индексы.
Название говорить не буду. Боюсь соврать.
37 H A D G E H O G s
 
26.07.23
16:25
(35) Раньше была годная статья по индексам на sql.ru, но его не стало.
38 H A D G E H O G s
 
26.07.23
16:26
(25) (26) Жись не ограничивается отчетами и регистрами.
39 Мультук
 
26.07.23
16:26
(25)

Я таки вас умоляю. В 1С уже давно движения делают непроведенные документы (привет РН "РезервыТоваровОрганизаций")
40 H A D G E H O G s
 
26.07.23
16:26
(30) Если есть такие увлекательные истории - то это проеб в архитектуре либо структур данных, либо запроса.
41 СвинТуз
 
26.07.23
16:29
(39)
и Чо?
Я о том и говорю. В регистры то движения попадают?
42 ASimonova
 
26.07.23
16:30
(40) архитектура правда страдает, но мы же не можем получить все и сразу. если есть возможность улучшить производительность индексацией, то надо пользоваться... так все-таки это возможно? или точно врет?)
43 СвинТуз
 
26.07.23
16:31
(36)
Когда то я с ней на работу ездил.
Выучил содержание, забыл как называется )))
44 СвинТуз
 
26.07.23
16:32
лет 10 и забудешь как обложка выглядит, тем более что смотришь на содержание, внутрь.
45 СвинТуз
 
26.07.23
16:33
лет 5 ее в руках не держал )))
46 СвинТуз
 
26.07.23
16:34
Читайте все что найдете. Не ошибетесь.


"Убивайте всех. Господь узнает своих." (С)
47 H A D G E H O G s
 
26.07.23
16:35
48 ASimonova
 
26.07.23
16:37
(47) спасибо
49 ASimonova
 
26.07.23
16:37
(46) )))) я постараюсь)
50 H A D G E H O G s
 
26.07.23
16:47
(42) Врут.
Есть 2 редких варианта индексации ВТ:
1) Индексируем крайне большую ВТ, по которой мы потом соединимся с маленькой. Но, как только возникает крайне большая ВТ - возникает вопрос - кто тот гений, которых додумался ее создать, создание крайне большой ВТ передаст привет всем тем 100 ребятам, которые сейчас работают в базе.
2) Индексируем ВТ, с которой потом будем соединять другую таблицу по 2 и более полям, среди которых одно будет на неравенство и MS SQL предложит hash join. Крайне редкий случай, я уж и не помню, когда он мне встретился.
51 H A D G E H O G s
 
26.07.23
16:52
Вот здесь хорошо разобраны механизмы соединений
https://habr.com/ru/articles/657331/
52 ASimonova
 
26.07.23
16:53
(51) спасибо!
53 H A D G E H O G s
 
26.07.23
16:56
(52) Вам рано читать (50), начните с (47). Пункт (51) - потом.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший