首页 > 其他分享 >openGauss学习笔记-31 openGauss 高级数据管理-索引

openGauss学习笔记-31 openGauss 高级数据管理-索引

时间:2023-08-05 11:02:46浏览次数:57  
标签:name 31 t1 索引 数据管理 mode SM openGauss ship

openGauss学习笔记-31 openGauss 高级数据管理-索引

索引是一个指向表中数据的指针。一个数据库中的索引与一本书的索引目录是非常相似的。

索引可以用来提高数据库查询性能,但是不恰当的使用将导致数据库性能下降。建议仅在匹配如下某条原则时创建索引:

  • 经常执行查询的字段。
  • 在连接条件上创建索引,对于存在多字段连接的查询,建议在这些字段上建立组合索引。例如,select * from t1 join t2 on t1.a=t2.a and t1.b=t2.b,可以在t1表上的a,b字段上建立组合索引。
  • WHERE子句的过滤条件字段上(尤其是范围条件)。
  • 经常出现在ORDER BY、GROUP BY和DISTINCT后的字段。

31.1 语法格式

  • 单列索引

    单列索引是一个只基于表的一个列上创建的索引。

    CREATE INDEX [ [schema_name.]index_name ] ON table_name  (column_name);
    
  • 组合索引

    组合索引是基于表的多列上创建的索引。

    CREATE INDEX [ [schema_name.]index_name ] ON table_name  (column1_name,column2_name,...);
    
  • 唯一索引

    指定唯一索引的字段不允许重复值插入。

    CREATE  UNIQUE INDEX [ [schema_name.]index_name ] ON table_name  (column_name);
    
  • 局部索引

    在表的子集上构建索引,子集由一个条件表达式定义。

    CREATE INDEX [ [schema_name.]index_name ] ON table_name  (expression);
    
  • 部分索引

    部分索引是一个只包含表的一部分记录的索引,通常是该表中比其他部分数据更有用的部分。

    CREATE INDEX [ [schema_name.]index_name ] ON table_name  (column_name) 
       [ WHERE predicate ]
    
  • 删除索引

    DROP INDEX index_name;
    

31.2 参数说明

  • UNIQUE

    创建唯一性索引,每次添加数据时检测表中是否有重复值。如果插入或更新的值会引起重复的记录时,将导致一个错误。

    目前只有B-tree索引支持唯一索引。

  • schema_name

    模式的名称。

    取值范围:已存在模式名。

  • index_name

    要创建的索引名,索引的模式与表相同。

    取值范围:字符串,要符合标识符的命名规范。

  • table_name

    需要为其创建索引的表的名称,可以用模式修饰。

    取值范围:已存在的表名。

  • column_name

    表中需要创建索引的列的名称(字段名)。

    如果索引方式支持多字段索引,可以声明多个字段。全局索引最多可以声明31个字段,其他索引最多可以声明32个字段。

  • expression

    创建一个基于该表的一个或多个字段的表达式索引,通常必须写在圆括弧中。如果表达式有函数调用的形式,圆括弧可以省略。

    表达式索引可用于获取对基本数据的某种变形的快速访问。比如,一个在upper(col)上的函数索引将允许WHERE upper(col) = 'JIM'子句使用索引。

    在创建表达式索引时,如果表达式中包含IS NULL子句,则这种索引是无效的。此时,建议用户尝试创建一个部分索引。

  • WHERE predicate

    创建一个部分索引。部分索引是一个只包含表的一部分记录的索引,通常是该表中比其他部分数据更有用的部分。例如,有一个表,表里包含已记账和未记账的定单,未记账的定单只占表的一小部分而且这部分是最常用的部分,此时就可以通过只在未记账部分创建一个索引来改善性能。另外一个可能的用途是使用带有UNIQUE的WHERE强制一个表的某个子集的唯一性。

    取值范围:predicate表达式只能引用表的字段,它可以使用所有字段,而不仅是被索引的字段。目前,子查询和聚集表达式不能出现在WHERE子句里。

31.3 示例

创建表tpcds.ship_mode_t1。

openGauss=# CREATE SCHEMA tpcds;
openGauss=# CREATE TABLE tpcds.ship_mode_t1
(
    SM_SHIP_MODE_SK           INTEGER               NOT NULL,
    SM_SHIP_MODE_ID           CHAR(16)              NOT NULL,
    SM_TYPE                   CHAR(30)                      ,
    SM_CODE                   CHAR(10)                      ,
    SM_CARRIER                CHAR(20)                      ,
    SM_CONTRACT               CHAR(20)
) ;

在表tpcds.ship_mode_t1上的SM_SHIP_MODE_ID字段上创建单列索引。

openGauss=# CREATE UNIQUE INDEX ds_ship_mode_t1_index0 ON tpcds.ship_mode_t1(SM_SHIP_MODE_ID);

在表tpcds.ship_mode_t1上的SM_SHIP_MODE_SK字段上创建普通的唯一索引。

openGauss=# CREATE UNIQUE INDEX ds_ship_mode_t1_index1 ON tpcds.ship_mode_t1(SM_SHIP_MODE_SK);

在表tpcds.ship_mode_t1上SM_CODE字段上创建表达式索引。

openGauss=# CREATE INDEX ds_ship_mode_t1_index2 ON tpcds.ship_mode_t1(SUBSTR(SM_CODE,1 ,4));

在表tpcds.ship_mode_t1上的SM_SHIP_MODE_SK字段上创建SM_SHIP_MODE_SK大于10的部分索引。

openGauss=# CREATE UNIQUE INDEX ds_ship_mode_t1_index3 ON tpcds.ship_mode_t1(SM_SHIP_MODE_SK) WHERE SM_SHIP_MODE_SK>10;

删除已创建索引。

openGauss=# DROP INDEX tpcds.ds_ship_mode_t1_index2;

标签:name,31,t1,索引,数据管理,mode,SM,openGauss,ship
From: https://blog.51cto.com/u_237826/6973899

相关文章

  • 《安富莱嵌入式周报》第319期:声音编程器,开源激光雕刻机,自制600W海尔贝克无刷电机,车用
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 更新视频教程:更新第7期ThreadX视频教程:如何实现RTOS高效的任务管理,抢占式调度,时间片调度和零中断延迟(2023-07-31)https://www.armbbs.cn/forum.php?mod=viewthread&tid......
  • 9月8日还可抽8月31日已经结束的奖
    支付宝缺陷,运动服务-运动大富翁哈马大富翁幸运转盘,201909089月8日还可抽8月31日已经结束的奖 ......
  • openGauss学习笔记-30 openGauss 高级数据管理-别名
    openGauss学习笔记-30openGauss高级数据管理-别名SQL可以重命名一张表或者一个字段的名称,这个名称为该表或该字段的别名。创建别名是为了让表名或列名的可读性更强。SQL中使用AS来创建别名。30.1语法格式30.1.1列别名语法SELECT{*|[column[AS]output_name,...]}......
  • KP311AWP非隔离5V100mA开关电源芯片
    深圳市三佛科技有限公司分析KP311AWP非隔离5V100mA开关电源芯片 高性能、低成本离线式PWM功率开关KP311A是一款非隔离型、高集成度且低成本的PWM功率开关,适用于降压型和升降压型电路。KP311A采用高压单晶圆工艺,在同一片晶圆上集成有500V高压MOSFET和采用开关式峰值电流......
  • Day19(2023.07.31)
    行程8:45    到达上海市信息安全测评认证中心(黄浦区陆家浜路1308号)9:00  存档文件11:30--13:00   吃饭休息13:00  存档文件&Windows实践17:00      下班......
  • openGauss 5.0.0 资源管控功能介绍
    openGauss5.0.0资源管控功能介绍严少安2023-07-12228openGauss5.0.0在资源管控方面有了显著的提升。在原生的PostgreSQL中其实并没有资源管控特性,但是在EDB版本,及其他云厂的PG中,增加了资源管控能力,对于Serverless时代的数据库而言,资源管控能力是非常重要......
  • Beckhoff EL7031模块参数设置
    基本设置I/O-Devices-Device3(找到对应的设备)-Term1(EK1100)-Term2(EL7031)-CoeOnline 8010:01最大电流设置为600mA;8010:02保持电流设置为300mA;8010:03正常电压设置为24000mV;8010:06满步设置为200,表示1圈走200个脉冲;备注:以上参数和具体电机型号有关。8012:01:操作模......
  • 1312:【例3.4】昆虫繁殖
    1312:【例3.4】昆虫繁殖时间限制:1000ms      内存限制:65536KB提交数:41168   通过数:20495【题目描述】科学家在热带森林中发现了一种特殊的昆虫,这种昆虫的繁殖能力很强。每对成虫过x�个月产y�对卵,每对卵要过两个月长成成虫。假设每个成虫不死,第一个月只......
  • Toyota Programming Contest 2023#4(AtCoder Beginner Contest 311)
    Preface补下好久之前打的比赛博客这场前面都写的挺稳的,然后一到G就降智了没写出来A-FirstABC签到#include<cstdio>#include<iostream>#include<utility>#include<vector>#include<cstring>#include<cmath>#include<algorithm>#include<queue>#i......
  • openGauss学习笔记-29 openGauss 高级数据管理-UNION子句
    openGauss学习笔记-29openGauss高级数据管理-UNION子句UNION计算多个SELECT语句返回行集合的并集。UNION内部的SELECT语句必须拥有相同数量的列,列也必须拥有相似的数据类型。同时,每条SELECT语句中的列的顺序必须相同。29.1语法格式UNION:结果中如果出现相同的值,仅保留一个。......