SinoDB创建、更改、删除索引

SinoDB数据库的索引组织方式有两种:B+树索引与R树索引。B+ 树是大多数数据库所采用的索引组织方式。R 树索引作为表的辅助访问方法,主要用于查找多维空间数据。本文主要讨论B+ 树索引。

1. B+ 树索引

  B+ 树索引按级别进行组织。最高级别包含指向真实的数据的指针或者地址。其他级包含指向不同级别结点的指针,其中所包含的键小于等于更高级别的键。通过索引访问一行数据时,总是在根结点开始读取,然后沿着低级别读取,最终到包含指向数据的指针。

1.1 索引切分

  当一个新的索引值将被插入到一个已经满了的索引结点时,结点必须切分。B+ 树向根部增长。尝试向已满结点增加键,强迫将其切分为 2 个结点,并促使中间键值移向更高级别结点。如果键值造成的切分比结点中其他的键大,则在切分时就自行放置于该结点中。键向下一个高级别的移动可能也会造成高级别结点的切分。如果该高级结点的满结点是根结点,则也会切分。当根节点切分时,树将继续增加一个级别,形成新的根节点。

1.2 保持索引键值最小

  一个索引键是一个字段值,而索引就是基于该字段所建立的。SinoDB动态服务器索引键的最大值为 390 字节。

  我们要尽量保持索引键值大小为最小,原因有两个:

  • 对于动态服务器,一个结点的大小就是一页的大小。小的键值意味着内存中一个页面上能够存储更多键值,在检索数据时减少读取的I/O操作。

  • 小的键值可以减少 B+ 级别,提高索引读取性能。4 级树索引每行的读取次数比 3 级树多一次。如果要读取100,000行数据,这意味着为获取相同的数据3级树可以少进行 100,000 次读取。

2. 索引类型

SinoDB数据库包含以下索引类型:

① 唯一索引

唯一索引要求索引字段中的一个值只能出现一次。

create  unique index ix_orders on orders(orders_num) in idx_dbs;

② 重复索引

重复索引允许索引字段里出现重样的值。

create index ix_items on items(manu_code);

③ 复合索引

  在两个或更多字段上建立的索引是复合索引。复合索引有利于多字段连接,可以增加索引值的唯一性。复合索引最多包含 16个字段 ,最大键大小为 390 字节。

 create index order_ix1 on orders (order_num, order_date desc);

        这个复合索引中指定了按order_date 递减顺序(缺省为递增顺序)。

  SinoDB数据库的 B+ 树索引可以调转,所以当在单个字段上创建索引时不必指定 ASC (升序)或 DESC (降序)关键词。然而,在复合索引中为特定字段使用 DESC 关键词很有帮助。例如,如果应用经常查询按订单号和订单日期递减排列的订单信息。以上定义的复合索引就消除了数据库服务器重复排序工作。

④ 聚集索引

create cluster index ix_manufact on manufact(manu_code); —创建聚集索引

 alter index index_name to cluster; —更改现有索引为聚集索引

        当创建一个聚集索引或更改已有索引为聚集索引时,动态数据库按索引的顺序复制磁盘上的整个表,然后删除旧的表,所以必须在 dbspace 中有足够的空间来容纳表的副本,这个过程中还要求表的排他读取。

  因为数据是以聚集索引中的顺序被写入的,所以每个表只能有一个聚集索引。

  另外,当插入数据或更新数据时,SinoDB并不维护数据行的聚集索引。因此,聚集索引在相对静态的表中更加高效,在动态变化大的表中则相对低效。

3. online 子句

  ONLINE 子句允许用户在使用表的同时创建索引。没有了 ONLINE 子句,CREATE INDEX 语句会给表加排他锁,这意味着在索引建立期间其他用户不可以使用该表。但是不可以将 CREATE CLUSTER INDEX 语句和 ONLINE 子句一起使用。

create index order_ix1 on orders (order_num, order_date desc) online;

4. 分离索引

  分离索引指索引extent与表extent分开存储。缺省情况下,索引 extent 和数据 extent 在 一个 dbspace 中。也可以指定索引存放在单独的 dbspace 中。

create index customer_ix on customer (zipcode) in cust_ix_dbs;

5. 索引填充因子

  创建索引时可以通过 fillfactor 指定每一页索引填充的百分比。填充因子在索引生命周期中不会一直存在。它只在索引建立的时候起作用。

 create index state_code_idx on state(code) fillfactor 80;

        如果CREATE INDEX 未指定,则缺省使用onconfig配置参数 FILLFACTOR 指定的值。如果上面两处都未指定,则缺省值是百分之90。

  如果预测建表后不会再大量插入数据,创建索引时可以设置较高的FILLFACTOR 值。如果预测建表后还要大量插入数据,则使用较低的FILLFACTOR 值,以防止结点立即切分。否则,如果 FILLFACTOR 设定得过低,则索引使用的磁盘空间可能产生不必要的增长。

6. 更改、删除、重命名索引

alter index ix_man_cd to cluster;    —更改索引
rename index ix_cust to new_ix_cust;    —重命名索引
drop index ix_stock;  —删除索引

         更改、删除或重命名系统自己创建的索引(比如系统用于强制执行约束的索引)是不允许的,因为这类索引名称以空格开始。为更改、删除或重命名系统创建的索引,必须首先删除相关约束。

7. sysindexes 系统目录

sysindexes 描述了数据库中的每个索引。
 

 

[informix@vm84145 ~]$ dbaccess testdb3 -

Database selected.

> select sysindexes.*
> from sysindexes, systables where
> tabname = "fjta_news"
> and systables.tabid = sysindexes.tabid;

idxname    idx_fjta_news_id
owner      informix
tabid      179
idxtype    D
clustered  
part1      1
part2      0
part3      0
part4      0
part5      0
part6      0
part7      0
part8      0
part9      0
part10     0
part11     0
part12     0
part13     0
part14     0
part15     0
part16     0
levels     2
leaves     114.0000000000
nunique    15819.00000000
clust      7635.000000000

1 row(s) retrieved.

>

         sysindexes 的每一数据行包含一个索引名称、所有者、 tabid、索引类型、是否聚集错音、以及索引中使用的字段数量。

  sysindexes 表包含域 part1 到 part16,标识了每个索引基于的字段。由于每个索引可以存储 16个字段,所以在复合索引中使用的最大列数量是 16。

 更多信息内容请移步星瑞格官方社区,期待大家加入 
Sinoregal Tech ForumAsk questions, share solutions, and get to know the Sinoregal community.icon-default.png?t=N7T8https://forum.sinoregal.cn/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/309698.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSM项目转Springboot项目

SSM项目转Springboot项目 由于几年前写的一个ssm项目想转成springboot项目,所以今天倒腾了一下。 最近有人需要毕业设计转换一下,所以我有时间的话可以有偿帮忙转换,需要的私信我或+v:Arousala_ 首先创建一个新的spr…

面试官:MySQL的自增 ID 用完了,怎么办?

如果你用过或了解过MySQL,那你一定知道自增主键了。每个自增id都是定义了初始值,然后按照指定步长增长(默认步长是1)。虽然,自然数是没有上限的,但是我们在设计表结构的时候,通常都会指定字段长…

判断IQ水平-第12届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第50讲。 判断IQ水平&#…

MGRE-OSPF接口网络类型实验

OSPF接口网络类型实验 一,实验拓扑 初始拓扑: 最终拓扑: 二,实验要求及分析 要求: 1,R6为ISP只能配置IP地址,R1-R5的环回为私有网段 2,R1/R4/R5为全连的MGRE结构,R…

HCIP的学习(8)

OSPF数据报文 OSPF头部信息(公共固定) 版本:OSPF版本,在IPv4网络中版本字段恒定为数值2(v1属于实验室版本,v3属于IPv6)类型:代表具体是哪一种报文,按照1~5排序&#xff…

qt5-入门-QByteArray

参考: Using QByteArray - Qt Wiki https://wiki.qt.io/Using_QByteArray Qt总结之十五:QByteArray详解-CSDN博客 https://blog.csdn.net/Aidam_Bo/article/details/85778012 QT学习:09 QByteArray - schips - 博客园 https://www.cnblogs.…

数据结构—顺序表实现通讯录

在上一节我们基本了解了顺序表的基本知识,接下来我们就用顺序表来实现一下通讯录。 一、基于动态顺序表实现通讯录 1.1 功能介绍 1. 能够保存用户信息:姓名,性别,年龄,电话,地址等 2. 添加联系人信息 3. …

创新营销利器:淘宝扭蛋机小程序开发全解析

在数字化浪潮的推动下,淘宝扭蛋机小程序的开发成为了一种全新的购物体验。它巧妙地将传统扭蛋机的乐趣与移动技术的便捷相结合,为用户带来了前所未有的惊喜与互动。 淘宝扭蛋机小程序的开发,不仅是一次技术的革新,更是一次购物方…

使用Python写接口压测2简单递归

递归其实在压测场景用的不多,但是批量造数据或批量导出,用的比较多,常见的压测登陆,首先你要有登陆账号的csv,这个时候自己可以实现一个批量获取账号的py就很惬意。 编辑器 VScode VSCode 全称 Visual Studio Code&…

基于数据库现有表导出为设计文档

1.查询 SELECTCOLUMN_NAME 字段名,COLUMN_COMMENT 字段描述,COLUMN_TYPE 字段类型,false as 是否为主键 FROMINFORMATION_SCHEMA.COLUMNS wheretable_NAME region -- 表名2.查询结果 3.导出为excel

Python学习笔记20 - 模块

什么叫模块 自定义模块 Python中的包 Python中常用的内置模块 第三方模块的安装与使用

如何提升软件发布管理过程?

大家都说,实践出真知。在成为一位首席技术官(CTO)之前,我也是做着跑腿活,我的职业生涯是从软件工程师开始的,后来开始管理开发和 QA 团队,并负责发布管理管道。我做过上百个项目,其中…

【第十五届】蓝桥杯省赛C++b组

今年的蓝桥杯省赛已经结束了,与以往不同,今年又回到了8道题,而22,23年出现了10道题 大家觉得难度怎么样,欢迎进来讨论,博主今年没参加哈,大家聊聊,我听听大家的意见和看法哈 试题A:…

九州金榜|孩子青春期应该如何家庭教育?

青春期,是一个人从儿童走向成年的重要过渡阶段,也是心理、生理发生巨大变化的时期。面对这一特殊时期的孩子,家庭教育显得尤为重要。那么,作为家长,我们该如何进行青春期孩子的家庭教育呢?九州金榜家庭教育…

Langchain入门到实战-第一弹

Langchain入门到实战 Langchain简介官网地址Langchain概述Langchain作用Langchain开源包使用案例更新计划 Langchain简介 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://python.langchain.com/Langchain概述 LangC…

29、链表-删除链表的倒数第N个结点

思路: 首先找到倒数第N个结点 第一种方式 先统计链表的节点数,然后再次遍历len-N即可得到倒数第N个结点,然后将前一个节点的next指针指向next的下一个节点使用快慢指针,快指针先跑N个结点然后慢指针开始跑,等快指针到达尾节点后…

Kafka 简单介绍

目录 一 消息队列(MQ) 1,为什么需要消息队列(MQ 2,常见的 MQ 中间件 3,MQ 传统应用场景之异步处理 4,使用消息队列的好处 5,消息队列的两种模式 5.1点对点模式&#xf…

如何在Odoo 17库存中通过批次号和序列号追踪产品

在Odoo 17库存管理中,通过批次号和序列号追踪产品是一种确保产品从生产到销售全程可追溯的重要方式。在产品打包时或生产过程中会分配这些编号。批次号是指应用于具有相似属性的一组产品的一系列数字或代码,而序列号则是分配给特定单一物品的独特编号。O…

matlab使用教程(44)—绘制带标记的二维曲线图

在线图中添加标记是区分多个线条或突出显示特定数据点的有用方法。使用下面的一种方式添加标记: • 在线条设定输入参数(例如 plot(x,y,-s) )中包含标记符号。 • 将 Marker 属性指定为一个名称-值对组,例如 plot(x,y,Marker,s…

【干货】【常用电子元器件介绍】【晶振】--晶体振荡器/陶瓷谐振元器件的识别、检测、选用

声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。 一、 石英晶体振荡器 石英晶体振荡器(Quartz Crystal Oscillator)又称石英晶体谐振器,简称石英晶振或者   石英晶体振荡器是一种用于稳定频率和选择频率的电子元件,是高精度和高稳定度的…