CftClub.ru
Клуб специалистов ЦФТ-Банк

Порядок полей в составном индексе

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Oracle DBA
Предыдущая тема :: Следующая тема  
Автор Сообщение
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеСр Мар 11, 2009 12:35   Порядок полей в составном индексе Ответить с цитатой
Полезность: Нет оценки
В версии 8.8 ЦФТ создал составные индексы IDX_Z#MAIN_DOCUM_BRANCH_DATEDC (C_FILIAL, C_DATE_DOC) и IDX_Z#MAIN_DOCUM_BRANCH_DATEPR (C_FILIAL, C_DATE_PROV). В скобках указаны поля индекса: филиал и даты документа или проводки.
Допустим, что в таблице Z#MAIN_DOCUM много миллионов записей, поле C_FILIAL содержит всего от 1-го до 10 различных значений (наверное, в среднем 2), ну а даты - порядка 2000 различных значений (если работать на ЦФТ 5 лет).
ИМХО порядок полей должен быть обратным.
Как думают настоящие DBA, в каком порядке правильнее перечислять поля составного индекса? В таком, как сделало ЦФТ? Или наоборот - сначала даты, потом филиал?
Вот нашел такую цитату документации:
Цитата:
Choosing Keys for Composite Indexes
Follow these guidelines for choosing keys for composite indexes:

Consider creating a composite index on keys that are used together frequently in WHERE clause conditions combined with AND operators, especially if their combined selectivity is better than the selectivity of either key individually.
If several queries select the same set of keys based on one or more key values, then consider creating a composite index containing all of these keys.
Of course, consider the guidelines associated with the general performance advantages and trade-offs of indexes described in the previous sections.

Ordering Keys for Composite Indexes
Follow these guidelines for ordering keys in composite indexes:

Create the index so the keys used in WHERE clauses make up a leading portion.
If some keys are used in WHERE clauses more frequently, then be sure to create the index so that the more frequently selected keys make up a leading portion to allow the statements that use only these keys to use the index.
If all keys are used in WHERE clauses equally often, then ordering these keys from most selective to least selective in the CREATE INDEX statement best improves query performance.
If all keys are used in the WHERE clauses equally often but the data is physically ordered on one of the keys, then place that key first in the composite index.
Serj
Профи


Вступление в Клуб: 02.08.2007
СообщениеЧт Мар 12, 2009 13:30   Re: Порядок полей в составном индексе Ответить с цитатой
Полезность: Нет оценки
timochev пишет:
В версии 8.8 ЦФТ создал составные индексы IDX_Z#MAIN_DOCUM_BRANCH_DATEDC (C_FILIAL, C_DATE_DOC) и IDX_Z#MAIN_DOCUM_BRANCH_DATEPR (C_FILIAL, C_DATE_PROV). В
ИМХО порядок полей должен быть обратным.
Как думают настоящие DBA, в каком порядке правильнее перечислять поля составного индекса? from most selective to least selective in the CREATE INDEX statement best improves query performance. [/b]
If all keys are used in the WHERE clauses equally often but the data is physically ordered on one of the keys, then place that key first in the composite index.
- trace вам в руки! Про "настоящих DBA" - поржал все DBA в цфт - обычно там где разработка, на местах как не крути(не в квалификации дело) влияние на продукцию цфт минимизировано в плане администрирования - сама модель, структуры - все в их ведении, собственно imho - большие таблицы партицировать например по дате, индексы вешать на партиции и все хорошо будет. - и что-то мне подсказывает что в случае другого порядка полей в индексе быстродействие будет в пределах погрешности, если вообще будет.
Serj
Профи


Вступление в Клуб: 02.08.2007
СообщениеЧт Мар 12, 2009 13:39    Ответить с цитатой
Полезность: Нет оценки
http://www.sql.ru/faq/faq_topic.aspx?fid=285 - вот тут другое мнение, trace рассудит - я что-то у себя разницы не нашел.... - в ссылке не Oracle а Sybase.
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеЧт Мар 12, 2009 13:54    Ответить с цитатой
Полезность: Нет оценки
Serj пишет:
http://www.sql.ru/faq/faq_topic.aspx?fid=285 - вот тут другое мнение, trace рассудит - я что-то у себя разницы не нашел.... - в ссылке не Oracle а Sybase.


Цитата:
1. Первыми ставить поля, обладающие лучшей выборочностью индекса.
2. Первыми ставить поля, для которых будет меньшая разветвленность.

А разве лучшая выборочность не тянет за собой большую разветвленность? Мне кажется одно другому противоречит.
Serj
Профи


Вступление в Клуб: 02.08.2007
СообщениеЧт Мар 12, 2009 14:00    Ответить с цитатой
Полезность: Нет оценки
timochev пишет:
Serj пишет:
http://www.sql.ru/faq/faq_topic.aspx?fid=285 - вот тут другое мнение, trace рассудит - я что-то у себя разницы не нашел.... - в ссылке не Oracle а Sybase.


Цитата:
1. Первыми ставить поля, обладающие лучшей выборочностью индекса.
2. Первыми ставить поля, для которых будет меньшая разветвленность.

А разве лучшая выборочность не тянет за собой большую разветвленность? Мне кажется одно другому противоречит.
- да собственно большая кардинальность порождает больше веток в индексе, ну вот для Oracle конкретно - и именно для индексов по 2-ум полям , ну не увидел я у себя разницы в том каков порядок полей, просто я предлагаю провести эксперимент - с чисткой разделяемого и пула буферного кэша - сравнить трассы запроса, оно ведь как - доверяй (источникам) но проверяй, в ЦФТ кстати - по опыту общения - нормальные, внятные DBA.
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеПт Мар 13, 2009 09:56    Ответить с цитатой
Полезность: Нет оценки
Ну раз спецы в таком построении индекса криминала не видят, то пусть будет так. Я нас своей схеме вообще убил эти индексы, потому что у нас всего один филиал.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Oracle DBA Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru