1つの解説
インメモリ仮想列は、それらの値を持つように、テーブルの上にユーザー定義の仮想列の一部または全部を有効マテリアライズド(事前に計算)と、そのテーブルのための非仮想列のすべてと一緒にインメモリ列ストアに読み込ま。
メモリ内の仮想列は、仮想リストその具体的な実現(事前に計算)のユーザ定義の値の一部またはすべてをすることができ、インメモリストレージのカラムに挿入し、すべての非仮想列が格納され表インチ
インメモリ列ストアにユーザ定義の仮想列の値をマテリアライズすることは非常に、そのようなSIMD(単一命令複数データ)ベクトル処理としてメモリー内スキャンおよび用いて濾過する仮想列の値を有効な技術によってクエリのパフォーマンスを向上させることができ単に非仮想列のような。
(例えば、複雑な計算の列、および仮想列として得られた値の値を事前に、再計算する必要なく、次直接使用仮想列)事前計算することによって大幅にクエリのパフォーマンスを向上させることができます。
IM IM仮想ストレージ列に列を挿入するには、パラメータがINMEMORY_VIRTUAL_COLUMNSを設定します:
-
MANUAL(デフォルト):表には、IM列ストアに対して有効になっている場合は、それらを明示的にインメモリとして設定されていない限り、この表に定義されたIM仮想列は、人口の対象となりません。 - 需要显示指定虚拟列
-
ENABLE:テーブルはIM列ストアに対して有効になっている場合は、それらを明示的にNOインメモリとして設定されていない限り、この表に定義されたすべてのIM仮想列は、人口の対象となります。 - 除非显示指定虚拟列不插入
-
DISABLE:IM仮想列は、IMインラインストアに挿入することはできません。
実験2 - IM仮想列を有効にします
2.1 IM第1の柱状のストレージを有効にするには
INMEMORY_SIZE値は、100Mの最小値0ではありません。
ALTER SYSTEM SET INMEMORY_SIZE = 100M SCOPE=SPFILE;
SQL> SHOW PARAMETER INMEMORY_SIZE
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
inmemory_size big integer 100M
2.2パラメータの設定INMEMORY_VIRTUAL_COLUMNS
SQL> SHOW PARAMETER INMEMORY_VIRTUAL_COLUMNS
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
inmemory_virtual_columns string MANUAL
- 有効にするには再起動します
SQL> ALTER SYSTEM SET INMEMORY_VIRTUAL_COLUMNS=ENABLE SCOPE=SPFILE;
System altered.
表2.3は、IM柱状ストレージを有効に仮想列が含まれます
既存のテーブルには、仮想列の柱状のストレージを追加し、IMを有効にするには、2.3.1
SQL> alter table bonus add(weekly_sal as (ROUND(SAL*12/52,2)));
Table altered.
SQL> ALTER TABLE bonus INMEMORY;
Table altered.
- BONUSビューテーブルの構造は、複数のWEEKLY_SAL
SQL> desc bonus
Name Null? Type
----------------------------------------- -------- ----------------------------
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
SAL NUMBER
COMM NUMBER
WEEKLY_SAL NUMBER
2.3.2新しいテーブル(仮想列を有する)、および指定された列は、IM仮想ストレージ列に挿入され、表示され
- 新しい表
CREATE TABLE emp (
empno NUMBER(5) PRIMARY KEY,
ename VARCHAR2(15) NOT NULL,
job VARCHAR2(10),
sal NUMBER(7,2),
hrly_rate NUMBER(7,2) GENERATED ALWAYS AS (sal/2080), --虚拟列将sal列除以2080
deptno NUMBER(3) NOT NULL)
INMEMORY;
- カラムは、カラム内のIM hrly_rate仮想ストレージに挿入されます
ALTER TABLE LEI.emp INMEMORY(hrly_rate);
より詳細な情報は、公式ドキュメントを参照してください。
http://docs.oracle.com/database/122/INMEM/populating-objects-in-memory.htm#INMEM-GUID-C0BC34D3-2BD8-41A5-B2F0-9AB109C1B617