Винсент делает несколько важных замечаний относительно предостережений от IOT, но вы также можете получить от них существенные преимущества.
Лично я считаю, что они недостаточно используются в Oracle и должны рассматриваться гораздо шире, а не просто как решение проблем с производительностью. Поскольку вам необходимо пересоздать таблицу для преобразования между IOT и кучей, это изменение, которое вряд ли произойдет в постоянно загруженной и интенсивно используемой базе данных, если только проблемы с производительностью не являются серьезными.
У Мартина Видлейка есть отличная серия постов о IOT. Есть несколько существенных преимуществ, которые вы можете получить, используя их:
- Значительно сократить физические и логические чтения IO
- Более эффективное использование буферного кеша, что может повысить производительность всей системы
- Экономия места, поскольку вы просто поддерживаете индекс, а не таблицу (если у вас нет сегментов переполнения)
Однако, чтобы получить эти преимущества, вам нужны таблицы, в которых вы (почти) всегда включаете в запросы ведущие столбцы первичного ключа, и вы, вероятно, будете получать несколько строк одновременно. Некоторые распространенные примеры таких таблиц:
- Основные данные, которые часто встречаются в заказах - позиции заказа, счета-фактуры - строки счетов-фактур и т. Д.
- Таблицы разрешения «многие ко многим», которые обычно запрашиваются «односторонне». например, в
customer_addresses
таблице гораздо чаще можно найти все адреса для клиента, а не все клиенты для адреса.
Недостатком является то, что вставка данных происходит медленнее, поэтому вам необходимо взвесить затраты и выгоды. В конечном счете, все сводится к знанию ваших данных и пониманию того, как их следует использовать, что должно определять решение.