2010-08-01 2 views
33

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

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

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

ответ

-2

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

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

+1

Вы правы - в Oracle индексы называются только индексами, нет различий, как вы видите в MySQL и SQL Server. Неиндексированная таблица в Oracle - это сортировка кучи. Последовательности ближе к столбцу IDENTITY SQL Server, так как значения прироста и смещения в последовательностях независимы друг от друга - в отличие от MySQL. Но последовательности также не привязаны ни к одной таблице - они являются отдельными объектами. Это также означает, что вы можете иметь более одной последовательности, используемой в таблице (хотя и не часто). –

7

От руководства Oracle Concepts:

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

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

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

+0

Я всегда чувствовал, что вещь «хранится вместе» была красной селедкой, поскольку первичный ключ для таблицы, вероятно, не имеет смысла. Возможно, вы захотите записать записи кластера, которые были вставлены одновременно, но совместное расположение строк обычно связано с несколькими рядами, имеющими одинаковые (например, customer_id или invoice_id), и в этом случае хеш-кластер является лучшим выбором. –

1

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

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

19

В основном индекс-организованная таблица представляет собой индекс без таблицы. Поэтому, если у вас есть таблица, столбцы которой состоят из первичного ключа и не более одного столбца, то у вас есть возможный кандидат для ИНДЕКС-ОРГАНИЗАЦИИ.

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

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

12

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

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

9

Я считаю следующие виды таблиц отличные кандидаты для IOTs:

  • «малые» «подстановки» таблицы типа (например, часто запрашивается, обновляется нечасто, вписывается в относительно небольшое количество блоков)
  • любая таблица, в которой вы уже собираетесь иметь индекс, который охватывает все столбцы в любом случае (то есть может также сохранить пространство, используемое таблицей, если индекс дублирует 100% данных)
+1

Извините, это почти дубликат ответа Гэри. –

0

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

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

-2

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

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

Смежные вопросы