Vincentは、IOTの警告のいくつかの優れた点を指摘していますが、それらからもいくつかの重要な利点を得ることができます。
個人的には、これらはOracleでは十分に活用されておらず、パフォーマンスの問題に対する可能な限りの解決策ではなく、より広く検討する必要があると思います。IOTとヒープの間で変換するためにテーブルを再作成する必要があるため、これは変更であり、パフォーマンスの問題が深刻でない限り、常に使用頻度の高いデータベースでは起こりそうにありません。
Martin Widlakeには、IOTに関する一連の素晴らしい投稿があります。それらを使用することで得られるいくつかの重要な利点があります。
- 物理および論理IO読み取りを大幅に削減
- システム全体のパフォーマンスを向上させるバッファキャッシュのより効率的な使用
- (オーバーフローセグメントがない限り)テーブルではなく、インデックスを維持するだけで保存される領域
ただし、これらの利点を得るには、クエリに主キーの先頭列を常に(ほぼ)含めるテーブルが必要であり、一度に複数の行をフェッチする可能性があります。このようなテーブルの一般的な例は次のとおりです。
- 注文によく見られる複数のマスター詳細-注文アイテム、請求書-請求書明細など
- 通常「一方向」で照会される多対多の解決テーブル。たとえば、
customer_addresses
表では、住所のすべての顧客ではなく、顧客のすべての住所を検索する方がはるかに一般的です。
欠点は、データの挿入が遅いため、コストとメリットを比較検討する必要があることです。結局のところ、それはあなたのデータを知り、それがどのように使われるべきかを理解することにかかっています。