关键字:
KingbaseES、索引
一、索引概述
1.1 索引是什么
如果我们想查阅书中的某个知识点,我们是会一页一页翻找还是在书中目录去找呢?我们会先在书的目录中找,然后在看对应页的内容,因为这样能够节省时间加快效率。而索引就是帮助存储系统快速获取信息的一种数据结构,形象的说就是数据的目录。
1.2 KES支持的索引类型
1,Btree索引,使用Btree结构来存储索引数据,可以处理等值查询和范围查询,还可用于查询结果集排序。
2,Hash索引,基于Hash表实现,只能用于等值查询。
3,GiST索引,一种平衡的树形结构访问方法,其适用于多维数据和集合数据类型。
4,SP-GiST索引,作为一种基础模板来实现多种搜索方法。
5,GIN索引,一般用其搜索全文或JSON键值。
6,BRIN索引,用于存储连续相邻的数据块统计信息,可减少索引占用空间。
1.3索引设计原则
创建索引会增加数据库系统开销,创建索引要注意以下几点:
1,经常用于查询的字段创建索引。
2,经常用于连接的字段创建索引。
3,经常需要根据范围来查询的列上创建索引。
4,经常更新的表要避免对其创建过多索引。
5,不应在数据量很少的表上创建索引。
6,不应再数据取值区分度很小的列上创建索引,如“性别”。
二、常用索引方法
1,多列索引,对于多列联合查询场景下,可以创建多列索引,Btree、GiST、GIN、BRIN支持创建多列索引
(1)创建多列索引
(2)查询条件where a=1 and b=2形式,查看执行生效情况
(3)查询条件where a=1形式,查看执行生效情况
(4)查询条件where b=2形式,查看执行生效情况(索引并未生效)
注意:在执行过程中查询优化器会通过计算全表扫描、使用可能用到的索引情况的开销成本,最后选择成本开销最小的情况,这就是为何有些情况并没有用到索引的原因。
2,唯一索引,唯一索引可以保证某个字段值是唯一的,也可以保证多个字段组合值是唯一的,允许有NULL值。对于表中有唯一性约束或主键约束的字段,KES会自动创建相应的唯一索引。
(1)唯一索引的创建
(2)查看执行生效情况
3,表达式索引,表达式索引可以使用一个函数或表达式的计算结果作为索引字段,被索引的函数或表达式要用圆括号括起来,其适用于查询速度远比插入更新速度要求高的场景。
(1)表达式索引的创建
(2)查看执行生效情况
三、值得注意的
在学习实践的过程当中,当我们创建一个表,并在表上创建索引后,通过输入查询命令查看索引执行生效情况,可能会发现并没有正常走索引查询数据,这是因为当前我们创建的表的数据量不够,查询优化器会认为不走索引的速度更快,故而选择最优选择,如果我们想验证创建的索引是否生效,可以将参数enable_seqscan的状态设置为off,把全表扫描关了,强制走索引,这时就可以验证我们创建的索引了。
四、总结
1、索引就是帮助数据库系统来快速访问特定信息的数据结构,可以把它看作数据的目录。
2、KES支持Btree索引、Hash索引、GiST索引、SP-GiST索引、GIN索引。
3、索引会增加数据库系统开销,并不是越多越好,需要合理规划。
4、常用索引方法包括多列索引、唯一索引和表达式索引。
5、验证创建的索引时需要注意enable_seqscan参数状态。