Oracle 12c中性能优化功能增强新特性之重大突破(2)

CREATE TABLE和ALTER TABLE命令已被改进,因此,你可以决定表是否要存储在内存列存储中。以NO INMEMORY子句创建的表和不确定子句是一样的。下面的例子将展示用三种语法创建的三个表。

视图[DBA|ALL|USER]_TABLES已经被改进来包含内存列存储相关的信息。

CONN test/test@pdb1

CREATE TABLE im_tab (

id  NUMBER

) INMEMORY;

CREATE TABLE noim_tab (

id  NUMBER

) NO INMEMORY;

CREATE TABLE default_tab (

id  NUMBER

);

COLUMN table_name FORMAT A20

SELECT table_name,

inmemory,

inmemory_priority,

inmemory_distribute,

inmemory_compression,

inmemory_duplicate

FROM  user_tables

ORDER BY table_name;

TABLE_NAME          INMEMORY INMEMORY INMEMORY_DISTRIINMEMORY_COMPRESS INMEMORY_DUPL

-------------------- -------- ----------------------- ----------------- -------------

DEFAULT_TAB          DISABLED

IM_TAB              ENABLED  NONE    AUTO            FOR QUERY LOW    NO DUPLICATE

NOIM_TAB            DISABLED

3 rows selected.

SQL>

ALTER TABLE命令可以改变对象内存列存储方面的状态。下例容易的改变内存列存储的状态。

ALTER TABLE IM_TAB NO INMEMORY;

ALTER TABLE NOIM_TAB INMEMORY MEMCOMPRESS FORCAPACITY LOW;

ALTER TABLE DEFAULT_TAB INMEMORY PRIORITYHIGH;

SELECT table_name,

inmemory,

inmemory_priority,

inmemory_distribute,

inmemory_compression,

inmemory_duplicate

FROM  user_tables

ORDER BY table_name;

TABLE_NAME          INMEMORY INMEMORY INMEMORY_DISTRIINMEMORY_COMPRESS INMEMORY_DUPL

-------------------- -------- -------- -------------------------------- -------------

DEFAULT_TAB          ENABLED  HIGH    AUTO            FOR QUERY LOW    NO DUPLICATE

IM_TAB              DISABLED

NOIM_TAB            ENABLED  NONE    AUTO            FOR CAPACITY LOW  NO DUPLICATE

3 rows selected.

SQL>

5.  管理列

下例展示将部分列放进内存列存储的语法。

CREATE TABLE im_col_tab (

id  NUMBER,

col1NUMBER,

col2NUMBER,

col3NUMBER,

col4NUMBER

) INMEMORY

INMEMORY MEMCOMPRESS FOR QUERY HIGH (col1,col2)

INMEMORY MEMCOMPRESS FOR CAPACITY HIGH (col3)

NO INMEMORY (id, col4);

通过查询视图V$IM_COLUMN_LEVEL来获取列设置的相关信息。

CONN sys@pdb1 AS SYSDBA

SELECT table_name,

segment_column_id,

column_name,

inmemory_compression

FROM  v$im_column_level

WHERE owner = 'TEST'

and  table_name = 'IM_COL_TAB'

ORDER BY segment_column_id;

TABLE_NAME          SEGMENT_COLUMN_ID COLUMN_NAME                    INMEMORY_COMPRESSION

-------------------- ------------------------------------------------ --------------------------

IM_COL_TAB                          1 ID                              NO INMEMORY

IM_COL_TAB                          2 COL1                            FOR QUERY HIGH

IM_COL_TAB                          3 COL2                            FOR QUERY HIGH

IM_COL_TAB                          4 COL3                            FOR CAPACITY HIGH

IM_COL_TAB                          5 COL4                            NO INMEMORY

5 rows selected.

SQL>

可以用ALTER TABLE命令改变内存列存储的设置。

CONN test/test@pdb1

ALTER TABLE im_col_tab

NO INMEMORY (col1, col2)

INMEMORY MEMCOMPRESS FOR CAPACITY HIGH (col3)

NO INMEMORY (id, col4);

CONN sys@pdb1 AS SYSDBA

SELECT table_name,

segment_column_id,

column_name,

inmemory_compression

FROM  v$im_column_level

WHERE owner = 'TEST'

and  table_name = 'IM_COL_TAB'

ORDER BY segment_column_id;

TABLE_NAME          SEGMENT_COLUMN_ID COLUMN_NAME                    INMEMORY_COMPRESSION

-------------------- ------------------------------------------------ --------------------------

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/abf1c13cbd81f4426d58bdaf48a2cadf.html