KingbaseES索引说明

KingbaseES索引管理

  索引是一种建立在表上的数据库对象,主要作用就是加快对表的查询速度,合理的使用索引将大大减少磁盘访问次数,从而提升数据库性能。

关于索引
索引是和表关联的可选结构,可以实现对表更快的 SQL 查询速度。
就像手册中的文章目录索引可以帮助您更快的查看到关注的章节,KingbaseES 数据库的索引也起到类似的作
用,提供更快的访问表数据的方法。索引的新创建和使用无需重写任何查询语句,获取的结果与创建索引前是一样的,但您查询到结果的速度将更快了。
索引是如何加快查询速度的呢?那是因为,索引是建立在某个列或者几个列上 (即索引列),创建索引时,数据库服务器将根据索引列进行排序,并将排序的结果存储在索引指定的存储空间中。在执行查询时,数据库服务器首先在索引中查询,然后再到表中查询,因为索引中的数据进行了排序,因此只需要很少的查询次数就可以找到指定的数据。
在索引中查询,然后再到表中查询,因为索引中的数据进行了排序,因此只需要很少的查询次数就可以找到指定的数据。
KingbaseES 数据库提供了几种功能互补的索引方案:
• b-tree 索引: 默认也是最常用的索引
• Hash 索引: 只能处理简单等值比较
• GiST 索引:可以实现很多不同索引策略
• SP-GiST 索引:热热热热热若若若若若若若若若若若若若若若若若若若若让人人人允许实现众多不同的非平衡的基于磁盘的数据结构,例如四叉树、k-d树和 radix树。
• GIN 索引是“倒排索引”:它适合于包含多个组成值的数据值
• BRIN 索引(块范围索引的缩写):存储有关存放在一个表的连续物理块范围上的值摘要信息。
• BITMAP 索引:以位图形式存储列中特定数据的出现位置信息。
• 全局索引和本地索引: 与分区表和索引相关
• 基于函数的索引: 基于函数或者表达式的索引
索引在逻辑上和物理上都是独立于关联表中的数据。作为独立的结构,它们固然需要额外的存储空间。您的创建或删除索引操作,是不会影响基表、数据库应用程序或其他索引。并且当您插入、更新和删除相关表的行时,数据库将自动维护索引。如果索引被删除,所有应用程序仍然继续正常工作,但访问数据可能会因此变慢。
索引的管理指南
1.在插入表数据库后创建索引
一般情况下,在插入或加载数据之后,再为表创建索引会更有效率。
2.适合创建索引的表和列
若干适合表和列创建索引的指导原则。
若干适合表和列创建索引的指导原则。可以参考下面的准则来决定何时为表创建索引:
• 如果需要经常地检索大表中的少量的行,就为查询键创建索引;
• 为了改善多个表的连接的性能,可为连接列创建索引;
• 主键和唯一键自动具有索引,在外键上很多情况下也创建索引;
• 如果查询语句花费的时间太长,那么就检查表大小。如果它发生了显著变化,则需要评估现有的索引 (如果有的话)。
选取表中的索引列时可以参考以下几点原则,越多符合越适合作为索引列:
• 列中的值相对比较唯一;
• 取值范围大,适合建立索引 (适合普通索引);
• 列包含许多空值,但是查询通常会选择所有具有值的行。
反之,以下情况不应创建索引:
• 如果该表频繁的进行 DML 操作,不应建立索引,或者建立少量索引;
• 有很多重复值的列,一般不建议作为索引列;
• 太小的表,不用建立索引,也没有必要。
3.考虑排序索引列来改善性能
CREATE INDEX 语句中的列顺序会影响查询性能。通常,首先指定最常用的列。
如果查询中有多个字段组合定位,则不应为每个字段单独创建索引,而应该创建一个组合索引。当两个或多个字段都是等值查询时,组合索引中各个列的前后关系是无关紧要的。但是如果是非等值查询时,要想有效利用组合索引,则应该按等值字段在前,非等值字段在后的原则创建组合索引,查询时只能利用一个非等值的字段。
4.限制每个表的索引的数量
一个表可以有任意数量的索引。但是,索引越多,修改表时产生的开销就越大,磁盘占用也越多。
当插入或删除行时,表上的所有索引也要被更改;更改一个列时,包含该列的所有索引也要被更改。因此,在从表中检索数据的速度和更新表的速度之间需要权衡。典型的:如果一个表主要仅用于读,则索引多就有好处;如果一个表经常被更新,则索引不宜多建。
5.删除不再需要的索引
实践来看,当不再需要索引时,应及时将其删除。
要删除索引,您应该具有删除权限,或者该索引在您的模式中。在以下情况下应考虑将索引删除:
• 索引没有加速查询。比如,表非常小,或者表中可能有很多列,但索引项很少。
• 应用程序中的查询不使用索引,或者索引已无效。
• 重建索引之前,必须删除索引。
• 索引变得过于零散,应考虑重新创建索引,此时可以将其删除。
6.为索引制定表空间
可以在表空间中创建索引。
如果表及其索引使用相同的表空间能更方便地对数据库进行管理(如表空间或文件备份)或保证应用的可用性,因为所有有关的数据总是在一起联机。然而,将表及其索引放在不同的表空间(在不同磁盘上)产生的性能比放在相同的表空间更好,因为这样做减少了磁盘竞争。但是将表及其索引放在不同的表空间时,如果一个表上某索引所在的表空间脱机了,则涉及这张表的 SQL 语句可能由于执行计划仍旧需要使用被脱机的索引而不能成功执行。
7.评估索引大小和设置存储参数
在创建索引之前评估索引的占用空间的大小,将有益于磁盘空间规划和管理。
您可以使用综合评估的索引大小,结果对表、撤销表空间和重做日志文件的大小评估,以此来确定数据库所需的磁盘空间量,从而购买合适的硬件。
CREATE INDEX 语句创建索引时,可选的 WITH 子句可以为索引设置存储参数,每一种索引方法都有自己的存储参数集合。适当的存储参数可以改善使用该索引应用程序的 I/O 性能。例如,假设在创建索引之前估计索引的最大大小,之后就可以在创建该索引时设置适当的存储参数,就能很少为表的数据段分配簇。并且,所有的该索引的数据都被保存在相对连续的磁盘空间扇区中,这就减少了使用该索引的磁盘 I/O 操作所需的时间。
8.在禁用或删除约束之前考虑成本
因为唯一键和主键有关联的索引,所以在考虑是否禁用或删除 UNIQUE 或 PRIMARY KEY 约束时,应该考虑删除和创建索引的成本。
如果 UNIQUE 键或 PRIMARY KEY 约束的关联索引非常大,那么您可以通过启用约束来节省时间,而不是删除并重新创建索引。
您还可以选择在删除或禁用 UNIQUE 或 PRIMARY KEY 约束时显式指定想要保留或删除索引。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值