Когда я должен использовать организованную таблицу индексов Oracle? Или когда я не должен? - PullRequest
34 голосов
/ 01 августа 2010

Индекс Организованные таблицы (IOT) являются таблицами, хранящимися в структуре индекса. В то время как таблица хранится в куче неорганизовано, данные в IOT хранятся и сортируются по первичному ключу (данные являются индексом). IOT ведут себя так же, как «обычные» таблицы, и вы используете тот же SQL для доступа к ним.

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

Я предполагаю, что ответ - нет, поэтому, когда индексная таблица организована не лучший выбор?

Ответы [ 8 ]

19 голосов
/ 02 августа 2010

По сути, организованная по индексу таблица - это индекс без таблицы. Поэтому, если у вас есть таблица, столбцы которой состоят из первичного ключа и не более одного другого столбца, у вас есть возможный кандидат на INDEX ORGANIZED.

Но если вы обнаружите, что задумываетесь о необходимости дополнительных индексов для столбцов, не относящихся к первичному ключу, то вам, вероятно, лучше использовать обычную таблицу кучи. Таким образом, поскольку большинству таблиц, вероятно, нужны дополнительные индексы, большинство таблиц не подходят для IOT.

На практике таблицы, организованные по индексу, скорее всего, являются справочными данными, поиском кода. Таблицы приложений почти всегда просто организованы в куче.

13 голосов
/ 02 августа 2010

Я бы рассмотрел их для очень узких таблиц (таких как таблицы объединения, используемые для разрешения таблиц «многие ко многим»). Если (практически) все столбцы таблицы будут в любом случае включены в индекс, то почему бы вам не использовать IOT.

Небольшие таблицы могут быть хорошими кандидатами для IOT, как обсуждал Ричард Фут здесь

9 голосов
/ 02 августа 2010

Я считаю следующие типы таблиц отличными кандидатами на IOT:

  • таблицы «малого» типа «lookup» (например, часто запрашиваемые, редко обновляемые, помещаются в относительно небольшое количество блоков)
  • любая таблица, для которой у вас уже есть индекс, который в любом случае покрывает все столбцы (т. Е. Может также сэкономить пространство, используемое таблицей, если индекс дублирует 100% данных)
8 голосов
/ 01 августа 2010

Из Оракула Основные понятия Руководство:

Упорядоченные по индексу таблицы полезны, когда связанные части данных должны быть сохранены вместе или данные должны быть физически хранится в определенном порядке. Этот тип таблицы часто используются для информации поиск, пространственный (см. «Обзор Oracle Spatial ") и OLAP приложения (см. «OLAP»).

Этот вопрос от AskTom также может быть интересен, особенно когда кто-то дает сценарий, а затем спрашивает, будет ли IOT работать лучше, чем организованная таблица кучи, Том отвечает:

мы можем выдвигать гипотезы весь день, но пока вы не измерите, вы никогда не будете знаю точно.

1 голос
/ 01 августа 2010

Упорядоченная по индексу таблица, как правило, является хорошим выбором, если вы получаете доступ к данным из этой таблицы только по ключу, всему ключу и только по ключу.

Кроме того, существует множество ограничений относительно того, какие другие функции базы данных могут и не могут использоваться с таблицами, организованными по индексу, - напомню, что по крайней мере в одной версии нельзя было использовать логические резервные базы данных с таблицами, организованными по индексу. Упорядоченная по индексу таблица не является хорошим выбором, если она не позволяет использовать другие функции.

0 голосов
/ 14 апреля 2014

Организованная по индексу таблица - в отличие от обычной таблицы - имеет свой собственный способ структурирования, хранения и индексации данных.

Индексные организованные таблицы (IOT) - это индексы, которые фактически содержат индексируемые данные, в отличие от индексов, которые хранятся где-то еще и имеют ссылки на фактические данные.

0 голосов
/ 12 мая 2013

Все, что действительно сохраняет IOT, - это логические чтения сегмента таблицы, и, поскольку вы могли потратить два или три или более раз на индекс IOT / index, это не всегда большая экономия, за исключением небольших наборов данных.

Еще одна особенность, которую следует учитывать для ускорения поиска, особенно в больших таблицах, - это хеш-кластер из одной таблицы.При правильном создании они более эффективны для больших наборов данных, чем IOT, потому что им требуется только одно логическое чтение, чтобы найти данные, тогда как IOT по-прежнему является индексом, которому требуется несколько логических операций ввода-вывода для обнаружения конечного узла.

0 голосов
/ 01 августа 2010

Сам по себе я не могу комментировать IOT, однако, если я читаю это правильно, то они совпадают с «кластеризованным индексом» в SQL Server.Как правило, вы должны подумать о том, чтобы не использовать такой индекс, если ваш первичный ключ (или значения, которые вы индексируете, если это не первичный ключ), вероятно, будут распределены довольно случайным образом - так как эти вставки могут привести ко многим разбиениям страницы (дорого).

Индексы, такие как столбцы идентификаторов (последовательности в Oracle?) и даты «около текущей даты», как правило, являются подходящими кандидатами для таких индексов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...