(5.7)
生成カラム
1. ディスクに格納される場合 STOREDオプション
drop table tab1;
create table tab1(
col1 varchar(10)
,col2 varchar(10)
,col3 varchar(21) as (concat(col1,' ',col2) ) stored
);
insert into tab1(col1,col2) values('Test','Taro');
select * from tab1;
create index ind1 on tab1(col3);
→計算列にインデックス作成可能
2. ディスクに格納されない場合 VIRTUALオプション (デフォルト)
drop table tab1;
create table tab1(
col1 varchar(10)
,col2 varchar(10)
,col3 varchar(21) as (concat(col1,' ',col2) ) virtual
);
insert into tab1(col1,col2) values('Test','Taro');
select * from tab1;
create index ind1 on tab1(col3);
→計算列にインデックス作成可能
(12cR1)
仮想列はディスクには格納されない
drop table tab1 purge;
create table tab1(
col1 varchar2(10)
,col2 varchar2(10)
,col3 as (col1 || ' ' || col2)
);
insert into tab1(col1,col2) values('Test','Taro');
commit;
select * from tab1;
create index ind1 on tab1(col3);
→計算列にインデックス作成可能
(12)
生成列はディスクに格納される
drop table tab1 cascade;
create table tab1(
col1 varchar(10)
,col2 varchar(10)
,col3 varchar(21) generated always as (col1 || ' ' || col2) stored
);
insert into tab1(col1,col2) values('Test','Taro');
select * from tab1;
create index ind1 on tab1(col3);
→計算列にインデックス作成可能
(2014)
計算列はPERSISTED とマークされていない限り、ディスクには格納されない
1.ディスクに格納される場合 PERSISTEDオプション
drop table tab1;
create table tab1(
col1 varchar(10)
,col2 varchar(10)
,col3 as (col1 + ' ' + col2) persisted
);
insert into tab1(col1,col2) values('Test','Taro');
select * from tab1;
create index ind1 on tab1(col3);
→計算列にインデックス作成可能
2.ディスクに格納されない場合 オプションなし
drop table tab1;
create table tab1(
col1 varchar(10)
,col2 varchar(10)
,col3 as (col1 + ' ' + col2)
);
insert into tab1(col1,col2) values('Test','Taro');
create index ind1 on tab1(col3);
→計算列にインデックス作成可能