kes-v8r6 索引的管理

索引是表中的一列或几列经过组织之后的数据结构
什么时候创建索引:
经常用于条件过滤,多表关联条件时
当前b-树,gist,gin,bein支持多列索引,
缺点:
占用物理空间,
当增删改数据时,索引需要动态维护,可能会降低效率

什么时候不建议创建索引:
在查询时不经常使用的列
表数据量相对较小
表数据增删改操作比较频繁

索引语法
\h create index 
unique 唯一性索引
concurrently 并发索引
using 表示索引方法
nulls first/last 进行排序时,空值所在行所处的位置
with storage 设置索引数据块的使用方式
tablespace 索引数据存储的表空间
where 部分索引的约束表达式

索引什么情况会失效?
对索引进行格式编辑,类型转换,函数使用等
选择列不适合建立索引,筛选数据较大时,索引有效但不会引用索引路径
数据库生成执行计划时,统计信息存在偏差,可能不走索引
多列索引使用时,未使用主索引列,可能不走索引

无效索引的处理?
监控数据库中索引的状态及使用情况
索引删除尝试concurrently方式重建索引
无效索引在线重编译

\h alter index
\h drop index

\timing 打开/关闭计时功能
\sys_sleep(n) 休眠n秒钟
\x 将输出的行数进行列显示/不显示
sys_stat_reset() 重置数据库的统计信息

手动执行统计信息收集
analyze
vacuum analyze t_name;

1.2 全表扫描与简单索引
explain analyze SQL语句

唯一索引:
唯一性索引要求索引列中的数据满足唯一性
创建唯一索引的3种方式:
1.primary key,通过主键约束自动生成的索引
2.alter table xx add constrain yyy unique(zzz) 通过唯一性约束自动生成索引
3.通过create unique index..直接创建唯一索引
因为null值满足唯一性约束的特点,但索引使用时is(not) null不走索引,所有如果
在可能含有null值的列上创建唯一索引时,建议通过not null来约束进来的数据,或
nvl()转换进来的数据。

1.3 并发索引
sys_index 索引视图
重新编译无效的对你:
reindex (verbose) index ind_v3;
并发索引创建时会等待表上正在进行的事务操作,
如果创建并发索引的操作中断,会残留该索引的定义信息,重建前需要进行清理 
对于无效的索引(或其它对象),可以使用reindex进行处理,但不支持并发创建

1.4 重建索引
\h reindex
使用reindex重建索引的场景
重建索引
\di
reindex (verbose) index inx_name;
重建表关联的索引
reindex (verbose) table tab_name;
重建模式关联的索引
reindex (verbose) schema public;

1.5 索引的修改
\h alter index
1.6 索引的删除
\h drop index
跟踪监控索引,将使用很少或未使用的索引进行清除

二,索引的应用场景
基本功能
排序,排序分页操作
1.1 表连接
禁用索引扫描 
set enable_indexscan=off
set enable_bitmapscan=off
1.2 隐含唯一索引
在创建表的时候添加主键索引primary key;
在创建外键约束时,其依赖的主表列上需要满足唯一性约束的前提

2 索引类型
2.1.b-tree索引
b树索引是默认索引,
函数(表达式)索引
2.2 hash索引
hash索引通常是用来进行相等数据的查找,而不是进行范围扫描,并且在使用hash时
不能使用null谓词,
2.3.GIN索引 (Generalized Inverted Index)
通用逆向索引/反转索引/反向索引,可以处理单列中包含的多个值,如数组
2.4 GiST索引 (Generalized Search Tree)
通用搜索树,提供了一个创建平衡树结构以存储数据的方法
2.5 BRIN索引 (block range index)
块范围索引,空间是该索引主要关心的问题,默认128块(1M)
2.6 部分索引
部分索引不会包含表/列中所有的数据,而是将指定满足条件的数据创建对应的索引,因此
索引相对较小,查询效率较高。

3.全文索引
全文搜索(或文本搜索)提供了确定满足一个查询的自然语言文档的能力,并可以选择将它们
按照与查询的相关度排序。
KbES对文本数据类型提供了~,~*,like和ilike操作符
3.1 文档
一个文档是在一个全文搜索系统中进行搜索的单元
基本文本匹配
tsvector 文档,tsquery 查询项,
使用函数页可以将文档或词位进行转换,如to_tsvector(),to_tsquery();

tsvector 
如 自动拆分,排序,去重
select 'a fat cat sat on a mat and ate a fat rat'::tsvector;
识别空格或标点
select $$the lexeme '' contrains spaces$$::tsvector;
给词位增加权重
select 'a:1A fat:2B,4C cat:3D'::tsvector;
tsvector是一个排序的可区分的词位的列表
词位是被正规化合并了同一个词的不同变种的词
排序和去重是在输入期间自动完成的
权重通常用来反映文档结构 可A,B,C,D(默认 输出中不显示)
建议通过to_tsvector()对文档进行正规化词位处理

tsquery
如带权重的词位条件
select 'fat:ab & cat'::tsquery;
匹配前缀为super的词
select 'super:*'::tsquery;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值