索引的定义
普通索引
在 VENDOR 表中,以 VENDORID 为索引列建立索引 S1, 以 ACCOUNTNO, NAME 为索引列建立唯一索引 S2。
CREATW INDEX SI ON PURCHASE.VENDOR(VENDORID);
CREATE UNIQUE INDEX S2 ON PURCHASING.VENDOR(ACCOUNTNO,NAME);
函数索引
在 SALESTHISYEAR-SALESLASTYEAR 上创建一个函数索引
CREATE INDEX INDEX_FBI ON SALES.SALESPERSON(SALESTHISYEAR-SALESLASTYEAR);
空间索引
创建包含空间索引类型的表
CREATE TABLE testgeo(
id int,
name varchar(20),
geo ST_polygon
);
创建空间索引
CAREATE SPATIAL INDEX SPIDX ON testgo(geo);
删除空间索引
spidx drop index spidx;
索引的修改
重命名
重命名S1索引,需要具有DBA权限
ALTER INDEX PURCHASING.S1 RENAME TO PURCHASING.S2;
可见/隐藏
修改索引为 INVISIBLE
alter index index_C1 INVISIBLE;
修改索引状态
使用 UNUSABLE 将索引置为无效状态
ALTER INDEX INDEX_C1 UNUSABLE;
此时系统将不维护 INDEX_C1,与此相关的计划均失效。注意,若索引是用于保证数据唯一性的,那 么表仅能查询,不能更新。
使用 REBUILD 将索引置为生效状态。
ALTER INDEX INDEX_C1 REBUILD;
索引的删除
删除 S2 索引
DROP INDEX PURCHASING.S2;
管理位图连接索引
定义
创建位图连接索引:
create bitmap index SALES_CUSTOMER_NAME_IDX
on SALES.SALESORDER_HEADER(
SALES.CUSTOMER.PERSONID
)
from SALES.CUSTOMER,
SALES.SALESORDER_HEADER
where SALES.CUSTOMER.CUSTOMERID = SALES.SALESORDER_HEADER.CUSTOMERID;
执行查询:
Select TOTAL
from SALES.CUSTOMER,
SALES.SALESORDER_HEADER
where SALES.CUSTOMER.CUSTOMERID = SALES.SALESORDER_HEADER.CUSTOMERID
and SALES.CUSTOMER.PERSONID = '12';
删除
DROP INDEX sales.SALES_CUSTOMER_NAME_IDX;
sales是模式名,后面接的是索引名。
管理数组索引
定义
CREATE APPLY INDEX IDX ON TEST(C1)
使用
SELECT * FROM TEST WHERE CONTAIND(C1,2,3);
修改&删除同普通索引
管理全文索引
定义
在 PERSON 模式下的 ADDRESS 表的 ADDRES1 列上完全填充全 文索引
CREATE CONTEXT INDEX INDEX0001 ON PERSON.ADDRESS(ADDRESS1) LEXER CHINESE_LEXER
修改
在 PERSON 模式下的 ADDRESS 表的 ADDRES1 列上完全填充全 文索引
ALTER CONTEXT INDEX INDEX0001 ON PERSON.ADDRESS REBUILD;
删除
删除在 PERSON 模式下 ADDRESS 表的全文索引
ALTER CONTEXT INDEX INDEX0001 ON PERSON.ADDRESS REBUILD;
管理序列
定义
(1)创建序列 SEQ_QUANTITY
CREATE SEQUENCE SEQ_QUANTITY INCREMENT BY 10;
(2)将序列的第一个值插入表 PRODUCT_INVENTORY 中
INSERT INTO PRODUCTION.PRODUCT_INVENTORY VALUES(1,1, SEQ_QUANTITY.NEXTVAL);
查询:
SELECT * FROM PRODUCTION.PRODUCT_INVENTORY;
(3)将序列的第二个值插入表 PRODUCT_INVENTORY 中
INSERT INTO PRODUCTION.PRODUCT_INVENTORY VALUES(1,1, SEQ_QUANTITY.NEXTVAL);
查询:
SELECT * FROM PRODUCTION.PRODUCT_INVENTORY;
修改
修改序列的步长
ALTER SEQUENCE SEQ1 INCREMENT BY 1 ;
修改序列最小值
ALTER SEQUENCE SEQ3 MINVALUE 2;
删除
删除序列 SEQ_QUANTITY
DROP SEQUENCE SEQ_QUANTITY;
管理SQL域(DOMAIN)
定义
供具有 CREATE DOMAIN 和 CREATE ANY DOMAIN 系统权限的用户创建 DOMAIN。
CREATE DOMAIN DA INT CHECK (VALUE < 100);
删除
删除一个用户定义的域。用户可以删除自己拥有的域,具有 DROP ANY TABLE 系统权 限的用户则可以删除任意模式下的域。
DROP DOMAIN DA CASCADE;
使用
列定义虽然使用了域,但其 SYSCOLUMNS 系统表中类型相关字段记录域定义的数据类型,也就是说, 从 SYSCOLUMNS 系统表中不会表现出对域的引用。
在 T 表中使用第 1 节中创建的域 DA
CREATE TABLE T(ID DA);
设置列、索引生成统计信息
对 SYSOBJECTS 表上 ID 列生成统计信息,采样率的百分比为 30%。
STAT 30 ON SYS.SYSOBJECTS (ID);
对 PURCHASING 模式下的索引 S1 生成统计信息,采样率为 50%。
STAT 50 ON INDEX PURCHASING.S1;
对 SYSOBJECTS 表上 PID,NAME 列生成统计信息,采样率的百分比为 30%。
STAT 30 ON SYS.SYSOBJECTS (PID,NAME);