powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / использование include в индексе.
6 сообщений из 6, страница 1 из 1
использование include в индексе.
    #35809375
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день,
подскажите пожалуйста в каких случаях следует использовать индекс с include.

Такой пример:
Таблица1 в которой 15 полей.
Поля с 1 по 3 представляют первичный ключ.

С таблицей работают только 2 процедуры - процедура 1 добавляет записи и процедура 2 читает.
Записи не удаляются.
Частота чтений и добавлений примерно одинаковая.

Процедура 2 связывает таблицу 1 с таблицей 2 по полям с 4 по 5 и с таблицей 3 по полям 5, 6, 7.
Поля 1,2,3, 8 - 15 возвращаются процедурой.

DB2 советуетTo improve data-retrieval, add INCLUDE columns to unique indexes. Good candidates are columns that:
Are accessed frequently and therefore would benefit from index-only access
Are not required to limit the range of index scans
Do not affect the ordering or uniqueness of the index key.


( совет находится здесь )

Кажется, что можно было бы создать такие индексы
Код: plaintext
1.
2.
create index schema.idx_1 (поля  1 , 2 , 3 ) include( поля  8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ) allow reverse scans;
create index schema.idx_2 (поля  4 , 5 , 6 , 7 ) allow reverse scans
Второй индекс создается, т.к. одна из рекоммендаций для полей входящих в include что они не должны ограничивать диапозон индексного сканирования.
Правильно ли я понимаю, что раз поля 4,5,6,7 участвуют в соединениях (inner joins) с другими таблицами, то они влияют на диапозон сканируемых индексных ключей и следовательно должны быть исключены из include. В тоже время, индекс по ним нужен, для того чтобы соединения работали быстрее?

Целесообразен ли такой сценарий?

Я вижу следующие аргументы против: практическое дублирование данных т.к. их приходится хранить как в индексных страницах так и в страницах данных. Так ли это или хранение как-то оптимизируется?
Дороговизна insert, т.к. нужно ещё добавлять данные в такой большой индекс.
Сильно ли дорожает Insert на самом деле?

И ещё такой вопрос - если те поля, которые входят в Include являются по сути некластерным индексом, т.к. они, если я правильно понял, не сортируются, то зачем тогда создавать ещё один некластерный индекс, когда можно просто всё разместить в одном большом индексе:
Код: plaintext
create index schema.idx_1 (поля  1 , 2 , 3 ) include( поля  4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ) allow reverse scans

Помогите пожалуйста разобраться. Что-то подсказывает, что такие большие индескы делать не надо, но в чём тогда смысл совета стараться помещать в индекс поля наиболее часто возвращаемые запросами?

Заранее извиняюсь, если путанно изложил свой вопрос
и конечно всем заранее огромное спасибо за участие.
...
Рейтинг: 0 / 0
использование include в индексе.
    #35812103
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется, я очень запутанно всё изложил.

Поставлю вопрос так.

Если предположить, что у таблицы есть только один уникальный индекс, который выбирается при исполнении запроса, то насколько имеет смысл делать include и добавлять поля отображаемые в результате запроса.

Понятно, что отображение должно работать быстрее, но когда это действительно имеет смысл делать? Например если запрос возвращает с десяток записей, то наверное считать их из страниц данных не займёт много времени.
В чём же выигрыш идеи по сравнению с расходами?

Насколько сильно при этом страдает insert/update (учитывая, что поля входящие в include вроде бы не упорядочиваются, т.е. перестраиваются только указатели)

Заранее спасибо за ответ
...
Рейтинг: 0 / 0
использование include в индексе.
    #35812353
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я думаю так.
Индекс с вложенными полями это что типа маленькой таблицы.
Допустим у вас есть очень "широкая" таблица. Которая логически может быть разделена на несколько частей. Вот с помощью такого индекса можно ее и разделить.
Если объемы маленькие (пару десятков строк) то выигрыш от такого индекса не будет, так как fetch хоть и будет работать медленнее, но не за столько что бы покрыть потери в дисковом пространстве и производительности вставке(изменение\удаление).
С другой стороны при больших объемах. Он может вам помочь, что бы не пришлось сканировать всю таблицу, а дергать только нужные поля.

в вашем примере, я не знаю, что за запрос у вас там крутится, но
Код: plaintext
1.
create index schema.idx_1 (поля  1 , 2 , 3 ) include( поля  8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ) allow reverse scans;
Так бы я не делал.

Это все на основе теории, на практике такие индексы применять не приходилось.
Самый лучший вариант это сделать тестовый пример и попробовать.
...
Рейтинг: 0 / 0
использование include в индексе.
    #35812478
тлгдшлщм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мысли вслух
1) спроси db2advis и он тебе подскажет целесообразность включения полей в индекс.
2) надо проиграть несколько сценариев с индексами и без.
2) В принципе смысл есть. Однако нужно смотреть на SELECT'ы вы всегда тащите все поля или в большинстве случаев только 2-3?
4) Опять же объемы данных. Если это небольшой справочник порядка 100000 строк почему нет...
...
Рейтинг: 0 / 0
использование include в индексе.
    #35812638
Vladimir Kiselev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Построение индексов - процесс творческий. Иногда бывает, что предложенные db2asdvis индексы приходится анализировать и некоторые удалять (бывало в практике, удаление индекса ускорило именно выборку). Впрочем, статистику собирать не надо забывать.
Надо, пожалуй, почитать, по поводу блокировок при использовании индексов. Хотя, по логике, при выборке хоть из таблицы, хоть из индекса, блокировки таблиц должны быть.
Индексы рулят, однако если их штук 100 на большой таблице, приходится задумываться.
С include мы используем индексы, но, обычно, включаем мало полей (2-4).
А еще можно индексы в разные с таблицей tablespace разносить, хотя я не проверял, насколько это оптимальней и лучше работает.
...
Рейтинг: 0 / 0
использование include в индексе.
    #35814853
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем огромное спасибо за участие.
Я решил пока не использовать include т.к. таблица новая и записей в ней будет не очень много.
Думаю, что создавать громоздкий индекс особого смысла нет.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / использование include в индексе.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]