|   |   | 
| 
 | Субботний вопрос про индексы в СУБД | ☑ | ||
|---|---|---|---|---|
| 0
    
        Dmitry1c 25.10.14✎ 10:19 | 
        Ну вот есть древовидный индекс в базе
 Вот мы нашли вхождение на первом уровне, вот на втором, на третьем и так дошли до конца индекса (B-дерева). А как мы найдем запись в таблице, найдя конец этого самого В-дерева? | |||
| 1
    
        GANR 25.10.14✎ 10:24 | 
        (0) Вопрос полегче: могут ли выполнять функцию индекса такие структуры как массивы и списки? (допустим БД висит в оперативной памяти целиком). Ответ обоснуйте. 
 Пусть людям будет пища для размышлений. | |||
| 2
    
        Dmitry1c 25.10.14✎ 10:25 | 
        (1) таблицу значений в 1С можно проиндексировать)
 вопрос в (0) - мне нужен на него ответ. я тут не устраиваю спец. олимпиаду | |||
| 3
    
        ifso 25.10.14✎ 10:36 | 
        (0) чего в деревянном индексе ищешь?     | |||
| 4
    
        DmitrO 25.10.14✎ 10:43 | 
        (0)Листьями дерева как раз и являются записи.     | |||
| 5
    
        Dmitry1c 25.10.14✎ 10:55 | 
        (4) да, листьями.
 Но запись надо еще найти. Где связь между этой иерархической структурой и таблицей СУБД? У нас снова появляется поиск - дерево (найденный индекс) и таблица? WTF? | |||
| 6
    
        sda553 25.10.14✎ 10:58 | 
        (5) Упрощенно:в листке дерва записано "Запись номер 324584357". Дальше движок в таблице запись быстро находит по порядковому номеру     | |||
| 7
    
        Dmitry1c 25.10.14✎ 11:03 | 
        (6) т.е. индекс для нескольких полей только создается, правильно?
 Соответственно мы находим индекс (поиск по нескольким полям) и уже дальше по номеру записи прыгаем туда, куда надо? | |||
| 8
    
        sda553 25.10.14✎ 11:04 | 
        (7) Да, как оглавление в книге     | |||
| 9
    
        Dmitry1c 25.10.14✎ 11:06 | 
        (8) спасибо, это то, что я хотел узнать     | |||
| 10
    
        Dmitry1c 27.10.14✎ 11:20 | 
        Чтобы не плодить темы, спрошу здесь.
 Создал 2 измерения в регистре накопления, у обоих отметил галку "Индексировать". Ожидал появление индекса, в поля которого войдут оба измерения, однако, этого не произошло - в СУБД (MS SQL) появилось 2 индекса. Вопрос, а как же нам тогда создать индекс по обоим измерениям, допустим, я хочу искать сразу по складу и номенклатуре, или я чего-то не понимаю? | |||
| 11
    
        Looser-1c 27.10.14✎ 11:21 | 
        (10) Никак.
 1с не создаёт составные индексы по произвольным измерениям. Руками сделай. | |||
| 12
    
        Dmitry1c 27.10.14✎ 11:21 | 
        (11) WTF??? O_O     | |||
| 13
    
        Looser-1c 27.10.14✎ 11:21 | 
        (12) Чо? (с)     | |||
| 14
    
        Dmitry1c 27.10.14✎ 11:21 | 
        (11) а потом при реструктуризации снова их делать?     | |||
| 15
    
        Looser-1c 27.10.14✎ 11:22 | 
        (14) И чего? Сделай...     | |||
| 16
    
        Dmitry1c 27.10.14✎ 11:24 | 
        Составной индекс возможен только когда мы в запросе создаем временную таблицу и индексируем несколько полей?     | |||
| 17
    
        Dmitry1c 27.10.14✎ 11:30 | 
        (16) под составным я подразумеваю состоящим из пользовательских полей     | |||
| 18
    
        H A D G E H O G s 27.10.14✎ 11:34 | 
        (16) Да.     | |||
| 19
    
        H A D G E H O G s 27.10.14✎ 11:34 | 
        (16) Но этого делать не надо почти никогда.     | |||
| 20
    
        Dmitry1c 27.10.14✎ 11:35 | 
        (19) это в принципе понятно.
 Заглянул в регистр накопления "ПартииТоваровНаСкладах" - там проиндексировано поле "Склад", но не проиндексировано поле "Номенклатура". Они там что, измерением ошиблись, когда галку ставили, или это имеет какой-то смысл? | |||
| 21
    
        Dmitry1c 27.10.14✎ 11:35 | 
        (20) УПП*     | |||
| 22
    
        H A D G E H O G s 27.10.14✎ 11:39 | 
        (20) А что не так?
 Номенклатуру они отбирают сразу с Периодом, работает Кластерный индекс. Склад они отбирают вместе с Номенклатурой - работает кластерный индекс, либо без Номенклатуры - работает индекс по Складу. | |||
| 23
    
        H A D G E H O G s 27.10.14✎ 11:40 | 
        (20) Кстати, Перенеси Измерение "Организация" на самый верх, походу добавляли его в каком-то релизе, забили (забыли) про индексы.     | |||
| 24
    
        Dmitry1c 27.10.14✎ 11:42 | 
        (22) а откуда кластерный индекс знает, что поле "Номенклатура" будет в него включено?     | |||
| 25
    
        Dmitry1c 27.10.14✎ 11:43 | 
        (22) ну например в том же регистре "ПартииТоваровНаСкладахБухгалтерскийУчет" индексация наоборот - номенклатура проиндексирована, а склад нет.
 Это зависит от дальнейшего использования регистра (написанных запросов, получающих из него данные)? | |||
| 26
    
        H A D G E H O G s 27.10.14✎ 11:47 | 
        (24) В кластерный индекс таблицы остатков включен:
 Период Все измерения регистра Разделитель | |||
| 27
    
        H A D G E H O G s 27.10.14✎ 11:48 | 
        (25) Там первым идет Организация, из за этого (но я поспорю с этим решением).     | |||
| 28
    
        H A D G E H O G s 27.10.14✎ 11:48 | 
        (27) Поспорю потому, что очень мало случаев, когда нужно получить остатки по всем организациям.     | |||
| 29
    
        Dmitry1c 27.10.14✎ 11:49 | 
        (26) у меня в кластерном индексе нет измерений
 http://i65.fastpic.ru/big/2014/1027/46/8480b9b1cebe6f57d0a7a01c5266e546.png | |||
| 30
    
        H A D G E H O G s 27.10.14✎ 11:49 | 
        (28) При Партионном списании всегда стоит фильтр по Организации (а это главное).     | |||
| 31
    
        H A D G E H O G s 27.10.14✎ 11:49 | 
        (29) Это таблица движений     | |||
| 32
    
        Dmitry1c 27.10.14✎ 11:50 | 
        (31) Точно. Нашел! :)     | |||
| 33
    
        Dmitry1c 27.10.14✎ 11:51 | 
        (31) спасибо     | |||
| 34
    
        Dmitry1c 09.11.14✎ 12:33 | 
        -----Продолжаю вопросы-----
 Вот смотрите, kb.1c.ru говорит, что у таблицы документа всегда есть кластерный индекс по Ссылке (GUID) Вроде как GUID формируется - первые 8 байт это дата компьютера + что-то еще, вторые 8 байт - железо Это что же получается. Если у меня есть некоторое количество документов, и я переведу дату компьютера назад и создам документ, то, согласно кластерному индексу по ссылке, мой документ будет не последним, а встанет где-то между всеми документами? WTF? | |||
| 35
    
        Dmitry1c 09.11.14✎ 12:34 | 
        (34) увы, попробовать сейчас на субд не могу, железяки подходящей нет (сижу за 8-летним ноутбуком)     | |||
| 36
    
        etc 09.11.14✎ 12:50 | 
        (34) у тебя положение документа на временной оси чем определяется? наверно не GUID-ом, верно?     | |||
| 37
    
        Dmitry1c 09.11.14✎ 12:51 | ||||
| 38
    
        Dmitry1c 09.11.14✎ 12:52 | 
        (36) у нас есть таблица, по которой создан кластерный индекс. Согласно определению кластерного индекса, в этом случае физическая таблица сортируется по связанной с индексом колонке, в данном случае по ссылке (GUID). 
 В вопросе я конкретно про физическую таблицу | |||
| 39
    
        Reaper_1c 09.11.14✎ 12:53 | 
        (38) На физическом уровне таблиц не существует. Уймись уже.     | |||
| 40
    
        ДенисЧ 09.11.14✎ 12:54 | 
        (39) Хренассе... О_о     | |||
| 41
    
        Dmitry1c 09.11.14✎ 12:54 | 
        (39) вот это поворот     | |||
| 42
    
        etc 09.11.14✎ 12:55 | 
        чет я про сортировку физ таблиц в замешательстве. Немного не так представляю себе хранение данных.     | |||
| 43
    
        Dmitry1c 09.11.14✎ 12:55 | 
        (42) я сейчас читаю главу 8, Вильямс - Программирование баз данных MS SQL 2005     | |||
| 44
    
        etc 09.11.14✎ 12:57 | 
        на физическом уровне там же страницы, смещение, не?     | |||
| 45
    
        Dmitry1c 09.11.14✎ 12:58 | ||||
| 46
    
        Dmitry1c 09.11.14✎ 12:58 | 
        (44) я про физический уровень, на котором я вижу таблицу в MS SQL Management Studio     | |||
| 47
    
        Reaper_1c 09.11.14✎ 13:00 | 
        (44) там HoBT 
 (46) И что, ты сам что ли будешь записи искать? Искать их будет движок СУБД, и оперировать он будет не таблицами. | |||
| 48
    
        Dmitry1c 09.11.14✎ 13:03 | 
        (47) вопрос в (34) и он до сих пор не разрешился     | |||
| 49
    
        Reaper_1c 09.11.14✎ 13:04 | 
        (48) тебе какая разница?     | |||
| 50
    
        Dmitry1c 09.11.14✎ 13:05 | 
        (49) задача стоит     | |||
| 51
    
        Reaper_1c 09.11.14✎ 13:06 | 
        (50) Прими холодный душ.     | |||
| 52
    
        Dmitry1c 09.11.14✎ 13:07 | 
        (51) в тренажерку схожу и приму, хватит оффтопить     | |||
| 53
    
        DmitrO 09.11.14✎ 13:07 | 
        (50)идентификатор ссылки это не совсем GUID хотя тип данных такой же, 1С формирует идентификаторы ссылок своим способом так чтобы они были уникальны и всегда возрастали, так что не волнуйся, все у тебя будет хорошо.     | |||
| 54
    
        Dmitry1c 09.11.14✎ 13:08 | 
        (53) можно еще подробнее, ссылку на ресурс 1С или еще что-то такое? Откуда инфа?     | |||
| 55
    
        Dmitry1c 09.11.14✎ 13:09 | ||||
| 56
    
        Reaper_1c 09.11.14✎ 13:10 | 
        (52) Хватит страдать херней. Ты полез в дебри которые для решения задачи не нужны. Между тобой и данными - N слоев абстракций, предоставляемых различными компонентами большой информационной системы. Чего ты лезешь на финальный? Почему начинаешь с конца? Приведи задачу - тебе помогут, нафига вот это теоретизирование о высоких материях?     | |||
| 57
    
        DmitrO 09.11.14✎ 13:10 | 
        :) "..больше знать не надо, но это надо знать на зубок" (С) Карты, деньги, два ствола     | |||
| 58
    
        Dmitry1c 09.11.14✎ 13:10 | 
        (56) все гораздо прозаичней     | |||
| 59
    
        tridog 09.11.14✎ 13:14 | 
        (34) 1С генерирует гуиды для ссылок "читерски". Если сделать
 Для Шаг = 0 По 10 Цикл Сообщить(Справочники.Справочник1.ПолучитьСсылку().УникальныйИдентификатор()); КонецЦикла; - то можно увидеть, что в них некоторая часть последовательно возрастает. Насколько помню обсуждение на партнерке - это именно борьба с page splits. | |||
| 60
    
        Dmitry1c 09.11.14✎ 13:16 | 
        В ветке 
 v8: Где взять описание GUID, который в 1С 8? H A D G E H O G s ответил на вопрос в п.7 Всем спасибо, все свободны. | |||
| 61
    
        Dmitry1c 09.11.14✎ 13:22 | 
        Кстати, товарищ в 
 https://partners.v8.1c.ru/forum/topic/620414#m_620414 видимо даже нашел практическое применение моему вопросу | |||
| 62
    
        Dmitry1c 09.11.14✎ 13:23 | ||||
| 63
    
        Dmitry1c 09.11.14✎ 23:03 | 
        (34) подтвердил мысль практически.
 Если снимем сортировку с даты и времени, то в списке документов на файловой базе при запущенных 2 клиентских приложениях порядок документов будет зависеть от кластерного индекса, который идет по ссылке, т.е. не факт, что если мы на 2 клиенте создадим позже документ, то и в списке документов (список документов без сортировки по полям даты и времени) он будет позже. Положение документа в списке будет зависеть от того, какой был начальный ГУИД сеанса для данного типа документов. Т.е. в списке будут по порядку идти сначала либо документы 1го клиента, либо документы 2го клиента. Вот такая практическая закономерность. | |||
| 64
    
        famnam 10.11.14✎ 08:01 | 
        Добавлю свои 5 копеек про индексы.
 Для каждого нового объекта метаданных система автоматически создает основной кластерный индекс. Он один для каждого объекта. Для периодического РС он выглядит так: Период + Измерение1 + Измерение2 + ... Как видите, индексировать первое измерение нет смысла, тк в основном индексе уже измерение1 идет впереди. Если включить индексирование у второго измерения, то будет создан новый индекс: Измерение2 + Период + Измерение1 + Измерение2 + ... Аналогично и с реквизитом или ресурсом. | |||
| 65
    
        Dmitry1c 10.11.14✎ 08:28 | 
        (64) что-то у тебя тут запутанно как-то
 на kb.1c.ru отдельная статья есть про создаваемые индексы | |||
| 66
    
        Dmitry1c 10.11.14✎ 11:52 | 
        ------------------------------------------
 Почему, когда я ищу по составному индексу, если вы выборке кроме проиндексированного поля есть другие поля у меня все-таки выполняется CLUSTERED INDEX SCAN, а не INDEX SEEK? | |||
| 67
    
        Dmitry1c 10.11.14✎ 12:01 | 
        (66) да и не факт, что виновата именно "составность" индекса     | |||
| 68
    
        H A D G E H O G s 10.11.14✎ 12:02 | 
        (67) Селективность, не?     | |||
| 69
    
        Dmitry1c 10.11.14✎ 12:04 | 
        (68) т.е. оптимизатор принял решение, что тот вариант будет лучше?     | |||
| 70
    
        Dmitry1c 10.11.14✎ 12:08 | 
        Просто я думал: есть таблица, есть по ней составной не кластерный индекс.
 Если я выполняю запрос для нескольких полей выборки с условием WHERE по этой таблице по проиндексированному полю (которое по порядку является первым в составном индексе), выборка должна идти через INDEX SEEK. Как тут оптимизатор запроса мог принять стратегию INDEX SCAN? Причем INDEX SEEK выполняется, если в запросе идет выборка по одному полю - проиндексированному. | |||
| 71
    
        H A D G E H O G s 10.11.14✎ 12:11 | 
        (70) Странно.     | |||
| 72
    
        viktor_vv 10.11.14✎ 12:21 | 
        (70) А Index scan по тому же индексу ? Может сканировался другой индекс, где есть все поля выборки.     | |||
| 73
    
        H A D G E H O G s 10.11.14✎ 12:25 | 
        (72) Сканировался кластерный индекс, дефакто - таблица.     | |||
| 74
    
        Dmitry1c 10.11.14✎ 12:31 | 
        Как догадаюсь, почему так, отпишусь     | |||
| 75
    
        упс 10.11.14✎ 12:39 | 
        (70) какой процент записей таблицы вы получаете этим запросом? ЕМНИП, если ожидается, что запрос вернёт более 10% записей таблицы, SQL Server не заморачивается на index seek. 
 Возможно, статистика устарела и сервер обманывается. Хотя, с учётом (66), скорее всего, количество записей и размеры индексов таковы, что оптимизатор решает, что быстрее будет один раз просканировать кластерный индекс, чем сначала лезть в некластреный индекс, а потом в кластерный за доп. полями. | |||
| 76
    
        H A D G E H O G s 10.11.14✎ 13:02 | 
        (75) "чем сначала лезть в некластреный индекс, а потом в кластерный за доп. полями."
 Глупость какая. Автор сказал, что ищет по полю, которое входит первым в кластерный индекс. | |||
| 77
    
        упс 10.11.14✎ 13:04 | 
        (76) в (70):
 >>Просто я думал: есть таблица, есть по ней составной не кластерный индекс. | |||
| 78
    
        viktor_vv 10.11.14✎ 13:05 | 
        (76) Как раз-то у ТС некластерный индекс.
 " есть по ней составной не кластерный индекс" | |||
| 79
    
        H A D G E H O G s 10.11.14✎ 13:06 | 
        (78) (77) Балин, кривые мои глаза.     | |||
| 80
    
        H A D G E H O G s 10.11.14✎ 13:07 | 
        Индекс недостаточно селективен, чтобы делать indexseek+keylookup в случае наличия доп. полей, но достаточно селективен, чтобы сделать indexseek вместо indexscan по одному полю, вот и все дела.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |