詳細: インメモリー・ハイブリッド・スキャン

このページでは、Oracle Database 20cで異なった動作をするINMEMORY列とNO INMEMORY列の両方を参照する問合せについて詳しく説明します。

Oracle Database 20cより前は、問合せがNO INMEMORY属性が設定された列を参照している場合、その問合せは行ストア(バッファ・キャッシュ)のすべてのデータにアクセスしました。そのため、表スキャンでは列形式や述語プッシュダウンダウンなどのインメモリー機能を利用できませんでした。

Oracle Database 20c以降では、INMEMORY列とNO INMEMORY列の両方を参照する問合せが列データにアクセスできます。

場合によっては、IMハイブリッド・スキャンによってパフォーマンスを桁違いに向上させることができます。問合せに選択フィルタがある場合は、パフォーマンスが最大に向上します。この場合、IM列ストアは、行ストアで少数の行のみが投影されるように、ほとんどの行をフィルタですばやく除外できます。

最適なパフォーマンスを実現するために、オプティマイザは各種のアクセス方法を比較します。オプティマイザが表スキャンを選択した場合、記憶域エンジンは、通常の行ストア・スキャンよりもIMハイブリッド・スキャンの方がパフォーマンスが優れているかどうかを自動的に判断します。次の条件が満たされるときに、オプティマイザはハイブリッド・スキャンを考慮に入れます。

  • 述語にはINMEMORY列のみが含まれていること。
  • SELECT リストには、INMEMORY列とNO INMEMORY列の任意の組合せが含まれていること。

IMハイブリッド・スキャンでは、論理的に作業を2つに分割します。1つはIM列ストアに対する問合せを処理する部分で、もう1つは行ストアに対する問合せを処理する部分です。実行計画では、TABLE ACCESS INMEMORY FULL (HYBRID)という操作はハイブリッド・スキャンを示します。実行時統計が、行ストアにのみアクセスすることでパフォーマンスが高くなることを示している場合、データベースは実行時にIMハイブリッド・スキャンを無効にできることに注意してください。