CREATE INDEX player_sage ON player(sage) REVERSE; 23、定义约束时创建索引 P177 CREATE TABLE new_employee(
empno NUMBER(5) PRIMARY KEY USING INDEX TABLESPACE users PCTFREE 0, ename VARCHAR2(20) );
24. 修改索引 P177
(1)合并索引,例如,合并employee_name 索引的存储碎片 ALTER INDEX employee_ename COALESCE; (2)重建索引,例如,重建player_sage 索引 ALTER INDEX player_sage REBUILD;
(3)索引重命名,例如,将employee_ename 索引重命名为employee_new_ename Sql>alter index employee_ename rename to employee_new_ename; 25、监视索引 P179 打开索引监视状态
ALTER INDEX index_ename MONITORING USAGE; 关闭索引监视状态
ALTER INDEX index_ename NOMONITORING USAGE; 26、删除索引 P179
删除employee_ename 索引
SQL>DROP INDEX EMPLOYEE_ENAME; 27、索引的查询 P179
查询employee 表上的所有索引信息
SQL>SELECT INDEX_NAME,INDEX_TYPE FROM USER_INDEXES WHERE TABLE_NAME=’EMPLOYEE’; 28、创建索引化表 P181 CREATE TABLE new_student(
sno NUMBER PRIMARY KEY , sname CHAR(11), sage NUMBER, sex CHAR(2))
ORGANIZATION INDEX TABLESPACE USERS ;
29、可以通过子查询创建索引化表 P181 CREATE TABLE new_emp(
empno PRIMARY KEY,ename) ORGANIZATION INDEX
AS SELECT empno,ename FROM emp;
30、用PCTTHRESHOLD设置溢出存储 P182 示例
CREATE TABLE iot_pct(
ID NUMBER PRIMARY KEY, col1 VARCHAR2(20), col2 VARCHAR2(10),
col3 NUMBER)
ORGANIZATION INDEX TABLESPACE USERS
PCTTHRESHOLD 30 OVERFLOW TABLESPACE ORCLTBS1;
31、用INCLUDING设置溢出存储 P182 示例
CREATE TABLE iot_pct_include( ID NUMBER PRIMARY KEY, col1 VARCHAR2(20), col2 VARCHAR2(10), col3 NUMBER)
ORGANIZATION INDEX TABLESPACE USERS PCTTHRESHOLD 30 INCLUDING col2
OVERFLOW TABLESPACE ORCLTBS1; 32、修改索引数据段与溢出数据段 P183
ALTER TABLE new_student INITRANS 4 OVERFLOW INITRANS 6; ALTER TABLE iot_pct_include PCTTHRESHOLD 15 INCLUDING col2; ALTER TABLE new_student ADD OVERFLOW TABLESPACE ORCLTBS2; 33、重建索引化表 P183
ALTER TABLE new_student MOVE INITRANS 10;
ALTER TABLE iot_pct_include MOVE TABLESPACE ORCLTBS2 OVERFLOW TABLESPACE ORCLTBS3
24、创建一个分区表,将学生信息根据其出生日期进行分区,将1980年1月1日前出生的学生信息保存在ORCLTBS1表空间中,将1980年1月1日到1990年1月1日出生的学生信息保存在ORCLTBS2表空间中,将其他学生信息保存在ORCLTBS3表空间中。 P185 CREATE TABLE student_range(
sno NUMBER(6) PRIMARY KEY, sname VARCHAR2(10), sage int, birthday DATE )
PARTITION BY RANGE(birthday)
( PARTITION p1 VALUES LESS THAN
(TO_DATE('1980-1-1', 'YYYY-MM-DD')) TABLESPACE ORCLTBS1, PARTITION p2 VALUES LESS THAN
(TO_DATE('1990-1-1', 'YYYY-MM-DD')) TABLESPACE ORCLTBS2,
PARTITION p3 VALUES LESS THAN(MAXVALUE) TABLESPACE ORCLTBS3 STORAGE(INITIAL 10M NEXT 20M))
STORAGE(INITIAL 20M NEXT 10M MAXEXTENTS 10 );
创建一个分区表,将学生信息按性别不同进行分区,男学生信息保存在表空间ORCLTBS1中,而女学生信息保存在ORCLTBS2中。 CREATE TABLE student_list(
sno NUMBER(6) PRIMARY KEY, sname VARCHAR2(10),
sex CHAR(2) CHECK(sex in ('M', 'F')) )
PARTITION BY LIST(sex)
( PARTITION student_male VALUES('M') TABLESPACE ORCLTBS1,
PARTITION student_female VALUES('F') TABLESPACE ORCLTBS2 );
22、创建一个分区表,根据学号将学生信息均匀分布到ORCLTBS1和ORCLTBS2两个表空间中。 P186
CREATE TABLE student_hash (
sno NUMBER(6) PRIMARY KEY, sname VARCHAR2(10) )
PARTITION BY HASH(sno)
( PARTITION p1 TABLESPACE ORCLTBS1, PARTITION p2 TABLESPACE ORCLTBS2 );
CREATE TABLE student_hash2 (
sno NUMBER(6) PRIMARY KEY, sname VARCHAR2(10) ) PARTITION BY HASH(sno)
PARTITIONS 2 STORE IN(ORCLTBS1,ORCLTBS2);
23、创建一个范围-散列复合分区表,将1980年1月1日前出生的学生信息均匀地保存在ORCLTBS1和ORCLTBS2表空间中,1980年1月1日到1990年1月1日出生的学生信息保存在ORCLTBS3和ORCLTBS4表空间中,其他学生信息保存在ORCLTBS5表空间中。P187
CREATE TABLE student_range_hash( sno NUMBER(6) PRIMARY KEY, sname VARCHAR2(10), sage NUMBER(4), birthday DATE )
PARTITION BY RANGE(birthday) SUBPARTITION BY HASH(sage)
(PARTITION p1 VALUES LESS THAN(TO_DATE('1980-1-1', 'YYYY-MM-DD')) (SUBPARTITION p1_sub1 TABLESPACE ORCLTBS1, SUBPARTITION p1_sub2 TABLESPACE ORCLTBS2), PARTITION p2 VALUES LESS THAN(TO_DATE(\ (SUBPARTITION p2_sub1 TABLESPACE ORCLTBS3,
SUBPARTITION p2_sub2 TABLESPACE ORCLTBS4), PARTITION p3 VALUES LESS THAN(MAXVALUE) TABLESPACE ORCLTBS5 );
24、为分区表student_list的sage列建立基于范围的全局分区索引。 P190 CREATE INDEX student_range_global ON student_range(sage)
GLOBAL PARTITION BY RANGE(sage)
(PARTITION p1 VALUES LESS THAN (80) TABLESPACE ORCLTBS1,
PARTITION p2 VALUES LESS THAN (MAXVALUE) TABLESPACE ORCLTBS2 );
25、创建一个分区表,将学生信息根据其出生日期进行分区,将1980年1月1日前出生的学生信息保存在ORCLTBS1表空间中,将1980年1月1日到1990年1月1日出生的学生信息保存在ORCLTBS2表空间中,将其他学生信息保存在ORCLTBS3表空间中。 P187 CREATE TABLE student_range(
sno NUMBER(6) PRIMARY KEY, sname VARCHAR2(10), sage int, birthday DATE )
PARTITION BY RANGE(birthday)
( PARTITION p1 VALUES LESS THAN
(TO_DATE('1980-1-1', 'YYYY-MM-DD')) TABLESPACE ORCLTBS1, PARTITION p2 VALUES LESS THAN
(TO_DATE('1990-1-1', 'YYYY-MM-DD')) TABLESPACE ORCLTBS2,
PARTITION p3 VALUES LESS THAN(MAXVALUE) TABLESPACE ORCLTBS3 STORAGE(INITIAL 10M NEXT 20M))
STORAGE(INITIAL 20M NEXT 10M MAXEXTENTS 10 );
26创建一个分区表,将学生信息按性别不同进行分区,男学生信息保存在表空间ORCLTBS1中,而女学生信息保存在ORCLTBS2中 P186 CREATE TABLE student_list(
sno NUMBER(6) PRIMARY KEY, sname VARCHAR2(10),
sex CHAR(2) CHECK(sex in ('M', 'F')) )
PARTITION BY LIST(sex)
( PARTITION student_male VALUES('M') TABLESPACE ORCLTBS1,
PARTITION student_female VALUES('F') TABLESPACE ORCLTBS2 );
27创建一个分区表,根据学号将学生信息均匀分布到ORCLTBS1和ORCLTBS2两个表空间中。 P186
CREATE TABLE student_hash (
sno NUMBER(6) PRIMARY KEY, sname VARCHAR2(10) )
PARTITION BY HASH(sno)
( PARTITION p1 TABLESPACE ORCLTBS1, PARTITION p2 TABLESPACE ORCLTBS2 );
CREATE TABLE student_hash2 (
sno NUMBER(6) PRIMARY KEY, sname VARCHAR2(10) ) PARTITION BY HASH(sno)
PARTITIONS 2 STORE IN(ORCLTBS1,ORCLTBS2);
28创建一个范围-列表复合分区表,将1980年1月1日前出生的男、女学生信息分别保存在ORCLTBS1和ORCLTBS2表空间中,1980年1月1日到1990年1月1日出生的男、女学生信息分别保存在ORCLTBS3和ORCLTBS4表空间中,其他学生信息保存在ORCLTBS5表空间中。 P187 CREATE TABLE student_range_list( sno NUMBER(6) PRIMARY KEY,
sname VARCHAR2(10), sex CHAR(2) CHECK(sex IN ('M','F')), sage NUMBER(4), birthday DATE )
PARTITION BY RANGE(birthday) SUBPARTITION BY LIST(sex)
(PARTITION p1 VALUES LESS THAN(TO_DATE('1980-1-1', 'YYYY-MM-DD')) (SUBPARTITION p1_sub1 VALUES('M') TABLESPACE ORCLTBS1, SUBPARTITION p1_sub2 VALUES('F') TABLESPACE ORCLTBS2),
PARTITION p2 VALUES LESS THAN(TO_DATE('1990-1-1', 'YYYY-MM-DD')) (SUBPARTITION p2_sub1 VALUES('M') TABLESPACE ORCLTBS3, SUBPARTITION p2_sub2 VALUES('F') TABLESPACE ORCLTBS4),
PARTITION p3 VALUES LESS THAN(MAXVALUE) TABLESPACE ORCLTBS5 );
29、创建一个范围-散列复合分区表,将1980年1月1日前出生的学生信息均匀地保存在ORCLTBS1和ORCLTBS2表空间中,1980年1月1日到1990年1月1日出生的学生信息保存在ORCLTBS3和ORCLTBS4表空间中,其他学生信息保存在ORCLTBS5表空间中。P187
CREATE TABLE student_range_hash( sno NUMBER(6) PRIMARY KEY, sname VARCHAR2(10), sage NUMBER(4), birthday DATE )
PARTITION BY RANGE(birthday)