首页 > 数据库 > Oracle > [20231017]建立索引的问题.txt
[20231017]建立索引的问题.txt
--//工作需要要建立1个索引,对于生产系统我个人还是比较谨慎的,该表很大21G,记录自己操作遇到的问题。
1.环境:
SYS@192.168.100.235:1521/orcl> @ pr
==============================
PORT_STRING : x86_64/Linux 2.4.xx
VERSION : 19.0.0.0.0
BANNER : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
BANNER_FULL : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
BANNER_LEGACY : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
CON_ID : 0
PL/SQL procedure successfully completed.
--//我先在toad生成sql语句的执行模板:
CREATE INDEX LIS.i_LIS_TEST_VISIT_NO ON LIS.LIS_TEST
(VISIT_NO)
LOGGING
STORAGE (
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
NOPARALLEL
COMPRESS 1
ONLINE
/
--//生成后我不会在toad下,我很害怕执行中间出现问题,比如网络断开或者windows死机之类的事情,我一般选择登陆服务器,进入
--//tmux界面,这样的好处是即使网络断开,会话一直保持着不会断开,我以后tmux att依旧可以连上。然后在sys用户下手工打入如下命
--//令执行:
create index i_LIS_TEST_VISIT_NO on lis.lis_test(visit_no) compress 1 online;
--//建立完成后检查:
SYS@192.168.100.235:1521/orcl> @ ind lis.i_LIS_TEST_VISIT_NO
Display indexes where table or index name matches %lis.i_LIS_TEST_VISIT_NO%...
--//居然没有发现.仔细检查才发现该索引建立在sys用户下,原来我前面少写owner!!
SYS@192.168.100.235:1521/orcl> @ ind LIS_TEST
Display indexes where table or index name matches %LIS_TEST%...
TABLE_OWNER TABLE_NAME INDEX_NAME POS# COLUMN_NAME DSC
----------- ---------- ------------------- ---- ------------------------------ ----
LIS LIS_TEST I_LIS_TEST_VISIT_NO 1 VISIT_NO
INDEX_OWNER TABLE_NAME INDEX_NAME IDXTYPE UNIQ STATUS PART TEMP H LFBLKS NDK NUM_ROWS CLUF LAST_ANALYZED DEGREE VISIBILIT
----------- ---------- ------------------- ---------- ---- -------- ---- ---- -- ---------- ------------- ---------- ---------- ------------------- ------ ---------
SYS LIS_TEST I_LIS_TEST_VISIT_NO NORMAL NO VALID NO N 3 20908 1267866 10870343 10398063 2023-10-17 08:55:42 1 VISIBLE
--//表建立在lis模式下,但是我建立的索引的owner是SYS,我看了一下,索引大小不到170M,主要原因是该字段存在大量空值,建立还是
--//很快的。安全起见,我决定重新建立,执行如下,
SYS@orcl> drop index i_LIS_TEST_VISIT_NO;
Index dropped.
SYS@orcl> create index lis.i_LIS_TEST_VISIT_NO on lis.lis_test(visit_no) compress 1 online;
Index created.
--//再次检查发现,现在建立正确。
SYS@192.168.100.235:1521/orcl> @ ind2 %.I_LIS_TEST_VISIT_NO
Display indexes where table or index name matches %.I_LIS_TEST_VISIT_NO...
TABLE_OWNER TABLE_NAME INDEX_NAME POS# COLUMN_NAME DSC
----------- ---------- ------------------- ---- ------------------------------ ----
LIS LIS_TEST I_LIS_TEST_VISIT_NO 1 VISIT_NO
INDEX_OWNER TABLE_NAME INDEX_NAME IDXTYPE UNIQ STATUS PART TEMP H LFBLKS NDK NUM_ROWS CLUF LAST_ANALYZED DEGREE VISIBILIT
----------- ---------- ------------------- ---------- ---- -------- ---- ---- -- ---------- ------------- ---------- ---------- ------------------- ------ ---------
LIS LIS_TEST I_LIS_TEST_VISIT_NO NORMAL NO VALID NO N 3 20909 1267894 10871215 10398814 2023-10-17 09:11:00 1 VISIBLE
--//实际上这是运维的一些细节问题,以后工作中要引起注意。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2990579/ ,如需转载,请注明出处,否则将追究法律责任。