LoginSignup
3
0

More than 5 years have passed since last update.

【Oracle Database】非表示列に作成した索引の状態は非表示になるのか

Posted at

私のAdvent Calendarタスクが終わってしまった

非表示列に作成した索引の状態は非表示になるのか

検証したいと思います

非表示列を含む表を作成

SQL> create table test_invisible (col1 number primary key, name varchar(20) invisible);

Table created.

こんな感じ

DESCしてみる

SQL> desc test_invisible
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                      NOT NULL NUMBER

でないね

SET COLINVISIBLE ON すれば見えるみたい

SQL> SET COLINVISIBLE ON
SQL> desc test_invisible
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                      NOT NULL NUMBER
 NAME (INVISIBLE)                                   VARCHAR2(20 CHAR)

ちなみにDBA_TAB_COLSのHIDDEN_COLUMN確認すれば非表示列があるかどうか分かる

SQL> desc DBA_TAB_COLS
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 OWNER                                     NOT NULL VARCHAR2(128)
 TABLE_NAME                                NOT NULL VARCHAR2(128)
 COLUMN_NAME                               NOT NULL VARCHAR2(128)
 DATA_TYPE                                          VARCHAR2(128)
 DATA_TYPE_MOD                                      VARCHAR2(3)
 DATA_TYPE_OWNER                                    VARCHAR2(128)
 DATA_LENGTH                               NOT NULL NUMBER
 DATA_PRECISION                                     NUMBER
 DATA_SCALE                                         NUMBER
 NULLABLE                                           VARCHAR2(1)
 COLUMN_ID                                          NUMBER
 DEFAULT_LENGTH                                     NUMBER
 DATA_DEFAULT                                       LONG
 NUM_DISTINCT                                       NUMBER
 LOW_VALUE                                          RAW(1000)
 HIGH_VALUE                                         RAW(1000)
 DENSITY                                            NUMBER
 NUM_NULLS                                          NUMBER
 NUM_BUCKETS                                        NUMBER
 LAST_ANALYZED                                      DATE
 SAMPLE_SIZE                                        NUMBER
 CHARACTER_SET_NAME                                 VARCHAR2(44)
 CHAR_COL_DECL_LENGTH                               NUMBER
 GLOBAL_STATS                                       VARCHAR2(3)
 USER_STATS                                         VARCHAR2(3)
 AVG_COL_LEN                                        NUMBER
 CHAR_LENGTH                                        NUMBER
 CHAR_USED                                          VARCHAR2(1)
 V80_FMT_IMAGE                                      VARCHAR2(3)
 DATA_UPGRADED                                      VARCHAR2(3)
 HIDDEN_COLUMN                                      VARCHAR2(3)
 VIRTUAL_COLUMN                                     VARCHAR2(3)
 SEGMENT_COLUMN_ID                                  NUMBER
 INTERNAL_COLUMN_ID                        NOT NULL NUMBER
 HISTOGRAM                                          VARCHAR2(15)
 QUALIFIED_COL_NAME                                 VARCHAR2(4000)
 USER_GENERATED                                     VARCHAR2(3)
 DEFAULT_ON_NULL                                    VARCHAR2(3)
 IDENTITY_COLUMN                                    VARCHAR2(3)
 SENSITIVE_COLUMN                                   VARCHAR2(3)
 EVALUATION_EDITION                                 VARCHAR2(128)
 UNUSABLE_BEFORE                                    VARCHAR2(128)
 UNUSABLE_BEGINNING                                 VARCHAR2(128)

SQL> select TABLE_NAME, COLUMN_NAME, HIDDEN_COLUMN from DBA_TAB_COLS where TABLE_NAME='TEST_INVISIBLE';

TABLE_NAME           COLUMN_NAME          HID
-------------------- -------------------- ---
TEST_INVISIBLE       COL1                 NO
TEST_INVISIBLE       NAME                 YES

非表示列に索引作成

どうなるんだろう

SQL> create index index_for_invisible on test_invisible(name);

Index created.

普通に作成できた
INVISIBLEになっているのか確認してみる

SQL> select index_name,visibility from ind where index_name='INDEX_FOR_INVISIBLE';

INDEX_NAME
--------------------------------------------------------------------------------
VISIBILIT
---------
INDEX_FOR_INVISIBLE
VISIBLE

VISIBLEになっている(当然か)
非表示索引作るときはきちんとINVISIBLEにしましょうってことね

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0