创建索引一般分为在线索引和非在线索引,在线与非在线的区别:非在线锁表,优先创建索引,此时DML都被阻塞,所以快;相反,在线锁的是行而非表,通过临时表进行索引的创建,所以不会影响DML操作,但副作用就是慢。
如果在生产环境操作,不停服务的话,势必导致创建索引期间仍有DML操作进来。另外如果是大表,那么采用非在线而导致锁表所带来的影响可能会很大。一句话,生产环境不停服的脚本操作,建议使用online。
1、创建索引。
create index IX_CELL_SC_BOX_CONTAINER_C1 on CELL_SC_BOX_CONTAINER (CREATE_TIME, CARRIER_ID, LOAD_ID, LOAD_STATUS, FACILITY_RRN) tablespace TBS_MY_INDEX pctfree 10 initrans 2 maxtrans 255;
2、创建在线索引。
create index indx_user_info on user_info(user_id, user_name) online tablespace TBS_MY_INDEX ;
3、删除索引。
DROP INDEX 索引名;
4、查看某个表的索引,表名需大写。
SELECT * FROM ALL_INDEXES WHERE TABLE_NAME = '表名'
5、查看某个表哪些列有索引。
SELECT * FROM ALL_IND_COLUMNS WHERE TABLE_NAME = '表名'
如果在where 子句中有OR 操作符或单独引用复合索引列的后面列则将不会走索引,将会进行全表扫描。
6、基本用法汇总。
--创建索引 CREATE [UNIQUE] INDEX <索引名> ON <基本表名> (<列名> [<次序>],[,<列名> [<次序>]]…); --说明: --UNIQUE:规定索引的每一个索引值只对应于表中的唯一记录。 --<次序>:建立索引时指定列名的索引表是ASC(升序)或DESC(降序)。 --索引的创建语句(简洁) create index 索引名 on 表名(列名); --标准语法 create index 索引名 on 表名(列名) tablespace 表空间名; --tablespace 表空间名 可以省略,以下皆省略 --创建唯一索引 create unique index 索引名 on 表名(列名); --复合索引/组合索引 create index 索引名 on 表名(列名1, 列名2, 列名3, ...); --反向键索引 create index 索引名 on 表名(列名) reverse; --删除索引 drop index 索引名 on 表名; --降序索引 CREATE INDEX 索引名 ON 表名(列名 desc) ; --升序asc --查看某个表中的所有索引 select * from all_indexes where table_name = '表名' --查看某个表中建立了索引的所有列 select * from all_ind_columns where table_name = '表名'
标签:index,--,创建,列名,索引,表名,Oracle,create From: https://www.cnblogs.com/lgx5/p/17253243.html