达梦管理索引、序列、域、生成统计信息

tech2025-11-15  3

索引的定义

普通索引

在 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);
最新回复(0)