注册
达梦索引
培训园地/ 文章详情 /

达梦索引

爆炒 牛肉 2025/07/29 134 1 0

达梦-索引
一 基本概念
1 .索引可分为聚集索引和非聚集索引。
(1)聚集索引(又称为一级索引、主索引):聚集索引就是按照聚集索引键构造一棵 B 树,
表数据存储在 B 树叶子节点上,通过定位索引可直接在 B 树中找到数据。每一个表有且只
有一个聚集索引。
(2)非聚集索引(又称为二级索引、辅助索引):将二级索引列和聚集索引列共同存储在 B
树叶子节点上。如果查找非聚集索引键值或聚集索引键值可直接在 B 树中找到;如果查找索
引键值以外的数据,则需要回到一级索引(聚集索引)中进行查找。一个表可以有多个非聚
集索引。
说明:
每个索引组织表只允许有一个聚集索引,如果之前已经指定过 CLUSTER INDEX 或者指定了
CLUSTER PK,则用户新建立 CLUSTER INDEX 时系统会自动删除原先的聚集索引。
指定 CLUSTER INDEX 操作需要重建表上的所有索引(自动重建),包括 PK 索引;
删除聚集索引时,缺省以 ROWID 排序,自动重建所有索引;
2 . 索引类型
聚簇索引
唯一索引
位图索引: 主要用来查询,不适合写入
函数索引:提升函数查询效率
组合索引:
全局索引与局部索引:主要针对分区表;
全文索引
二. 全局索引与局部索引
分区表创建全局索引和局部索引,在分区 truncate、drop、split、merge 等动作会自动重建全局索引。
全局索引:所有数据都放在一B树上
局部索引:每个分区都有一颗独立的B树,无论索引键是否是分区键
三. 索引维护
有效性/无效性(无效索引,DML 操作不会维护索引数据,执行计划不会选择走该索引) 无效的索引,重建后将有效 ;
可见性/不可见性(不可见索引,DML 操作仍然会维护索引数据,但执行计划不会选择走 该索引);
alter index ix_TESTTAB_username UNUSABLE; --不可用
alter index ix_TESTTAB_username REBUILD ONLINE; --索引重建
alter index ix_TESTTAB_username INVISIBLE;
alter index ix_TESTTAB_username VISIBLE;
四. 全文索引
1.概念:
(1)创建全文索引后,系统会自动产生四个相关辅助表(I 表,P 表,N 表,D 表):
CTI$INDEX_NAME$I, 用于保存分词结果,记录词的基本信息,通过该信息可以快速地 定位到该词的基表记录;
CTI$INDEX_NAME$P: 保存基表发生的增量数据变化,用于全文索引的增量填充。
CTI$INDEX_NAME$N: 用于保存原表记录 rowid 和新词条记录的 docid 的映射关系。
CTI$INDEX_NAME$D: 保存所有被删除的 docid,被删除的 docid 将不能通过全文索
引查询到。
(2)定义全文索引时可以指定分词参数 lexer ,DM 包含 5 种分词参数:

  1. CHINESE_LEXER,中文最少分词;
  2. CHINESE_VGRAM_LEXER,机械双字分词;
  3. CHINESE_FP_LEXER,中文最多分词;
  4. ENGLISH_LEXER,英文分词;
  5. DEFAULT_LEXER,默认分词,为中文最少分词。
    2.创建全文索引
    创建全文索引时如果不指定 sync 子句,则辅助表中无记录,后期需要手工填充分词结果。
    create CONTEXT index cti_TESTTAB_testinfo ON t_testtab(testinfo) TABLESPACE TBSIDX;
    3.全文索引更新
    全文索引的更新包括两种方式:完全更新和增量更新。
    --完全填充和增量填充
    alter CONTEXT index cti_TESTTAB_testinfo ON t_testtab REBUILD;
    alter CONTEXT index cti_TESTTAB_testinfo ON t_testtab INCREMENT;
    --创建索引时指定sync TRANSACTION子句填充,后期事务提交后自动填充
    create table t_contexttab as select * from T_TESTTAB;
    create CONTEXT index cti_contexttab_testinfo ON t_contexttab(testinfo)
    TABLESPACE TBSIDX LEXER default_lexer SYNC TRANSACTION;
    4.全文索引检索
    全文检索采用的分词算法与全文索引数据同步时采用的分词算法保持一致。
    select * from t_contexttab t where CONTAINS(testinfo, '链表');
    select * from t_contexttab t where CONTAINS(testinfo, '堆表' or 'ROWID');
    select * from t_contexttab t where CONTAINS(testinfo, '堆表' and 'ROWID');
    5 .删除全文索引
    drop CONTEXT index cti_contexttab_testinfo ON t_contexttab;
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服