暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB T CREATE INDEX

墨天轮 2019-10-12
1023

CREATE INDEX

功能描述

在指定的表上创建一个索引。索引可以用来提高数据库查询性能,但是不恰当的使用将导致性能下降。

注意事项

  • CLOB、BlOB和IMAGE类型的字段上不能创建索引。
  • 执行该语句的用户需要有CREATE INDEX、CREATE ANY INDEX系统权限,普通用户不可以创建系统用户对象。
  • 组合索引字段不超过16个,字段长度累加不超过3900字节,以类型最大长度为准。
  • 只能分区表创建分区索引。分区索引数与分区表数需一致,否则会报错。
  • 支持创建upper/to_char函数索引,约束条件是函数的参数只能是一列,并且不支持把函数索引转成约束。
  • 数据库重启回滚期间不支持该操作。

语法格式

CREATE [ UNIQUE ] INDEX [IF NOT EXISTS ] [ schema_name. ]index_name ON table_index_clause [ CRMODE { PAGE | ROW } ]
  • table_index_clause 子句:
    [ schema_name. ]table_name ( { [function_name()]column_name [ ASC | DESC ] } [ ,... ] ) index_attributes
    • index_attributes 子句:
      [ [ physical_attributes_clause ] [ TABLESPACE {tablespace_name} ] [index_partitioning_clauses] [ ONLINE ] ]
      • physical_attributes_clause 子句:
        INITRANS integer
      • index_partitioning_clauses 子句:
        LOCAL [ ( { PARTITION partition_name [ TABLESPACE tablespace_name ] [ INITRANS integer ] [ PCTFREE integer ] } [ , ... ] ) ]

参数说明

  • UNIQUE

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

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

  • IF NOT EXISTS

    创建索引时,如果索引已经存在,不做改动,直接返回成功。如果索引不存在,则创建新索引。

  • [schema_name.]

    模式名,与表的模式名相同,可省略。

  • index_name

    要创建的索引名。

  • table_name

    要创建索引的表名,可以有用户修饰。

  • function_name()

    创建函数索引的函数名称。

  • column_name

    表的列名(字段名)。

  • ASC

    指定按升序排序 (默认)。

  • DESC

    指定按降序排序。

    目前只支持升序建索引,DESC也是升序。

  • INITRANS

    索引事务初始大小。

    1-255。

  • TABLESPACE tablespace_name

    指定索引的表空间,如果没有声明则使用默认的表空间。

  • index_partitioning_clauses

    分区表局部索引。

  • LOCAL

    LOCAL是分区索引(本地索引),就是在所有每个区上单独创建索引,它能自动维护,在drop或truncate某个分区时不影响该索引的其他分区索引的使用。

  • PCTFREE

    必须保留的最小空间的比例,单位是百分比%,取值范围是 [8-80]。在索引创建时为索引块留下的剩余空间,这个剩余空间可以用来插入新的索引项。

  • ONLINE

    在线创建索引。

    普通创建索引作为DDL操作,会对表加排他锁,从而阻塞表上并发的UPDATE/DELETE/INSERT操作,影响系统表事务吞吐量,在线创建索引和在线重建索引功能旨在创建索引和重建索引过程中,对表加共享锁(仅在开始和结束阶段短暂地加排他锁),允许UPDATE/DELETE/INSERT操作并发执行,从而不影响在线业务的执行。

  • CRMODE { PAGE | ROW }
    指定该索引的CR_MODE,不指定时默认和表的CR_MODE配置保持一致。
    • CRMODE PAGE指定为页级MVCC模式。
    • CRMODE ROW指定为行级MVCC模式。

示例

  • 在普通表posts上在线创建索引。
    --删除表posts。 DROP TABLE IF EXISTS posts;
    --创建普通表posts。 CREATE TABLE posts(post_id CHAR(2) NOT NULL, post_name CHAR(6) PRIMARY KEY, basic_wage INT, basic_bonus INT);
    --创建索引idx_posts。 CREATE INDEX idx_posts ON posts(post_id ASC, post_name) ONLINE;
  • 在分区表education上创建分区索引。
    --删除表education。 DROP TABLE IF EXISTS education;
    --创建分区表education。 CREATE TABLE education(staff_id INT NOT NULL, higest_degree CHAR(8), graduate_school VARCHAR(64), graduate_date DATETIME, education_note VARCHAR(70)) PARTITION BY LIST(higest_degree) ( PARTITION doctor VALUES ('博士'), PARTITION master VALUES ('硕士'), PARTITION undergraduate VALUES ('学士') );
    --向表education中插入记录1。 INSERT INTO education(staff_id,higest_degree,graduate_school,graduate_date,education_note) VALUES(10,'博士','西安电子科技大学','2017-07-06 12:00:00','211'); --向表education中插入记录2。 INSERT INTO education(staff_id,higest_degree,graduate_school,graduate_date,education_note) VALUES(11,'博士','西北农林科技大学','2017-07-06 12:00:00','211和985'); --向表education中插入记录3。 INSERT INTO education(staff_id,higest_degree,graduate_school,graduate_date,education_note) VALUES(12,'硕士','西北工业大学','2017-07-06 12:00:00','211和985'); --向表education中插入记录4。 INSERT INTO education(staff_id,higest_degree,graduate_school,graduate_date,education_note) VALUES(15,'学士','西安建筑科技大学','2017-07-06 12:00:00','非211和985'); --向表education中插入记录5。 INSERT INTO education(staff_id,higest_degree,graduate_school,graduate_date,education_note) VALUES(18,'硕士','西安理工大学','2017-07-06 12:00:00','非211和985'); --向表education中插入记录6。 INSERT INTO education(staff_id,higest_degree,graduate_school,graduate_date,education_note) VALUES(20,'学士','北京师范大学','2017-07-06 12:00:00','211和985'); --提交事务。 COMMIT;
    --创建分区索引。 CREATE INDEX idx_training ON education(staff_id ASC, higest_degree) LOCAL (PARTITION doctor, PARTITION master, PARTITION undergraduate); --创建函数索引。 CREATE INDEX idx_func ON education(upper(graduate_school)); CREATE INDEX idx_func_1 ON education(to_char(staff_id));
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论