GaussDB支持4种创建索引的方式请参见表1。
|
索引方式 |
描述 |
|---|---|
|
唯一索引 |
可用于约束索引属性值的唯一性,或者属性组合值的唯一性。如果一个表声明了唯一约束或者主键,则GaussDB自动在组成主键或唯一约束的字段上创建唯一索引(可能是多字段索引),以实现这些约束。目前,GaussDB只有B-Tree及UBTree可以创建唯一索引。 |
|
多字段索引 |
一个索引可以定义在表中的多个属性上。目前,GaussDB中的B-Tree支持多字段索引,且最多可在32个字段上创建索引。 |
|
部分索引 |
建立在一个表的子集上的索引,这种索引方式只包含满足条件表达式的元组。 |
|
表达式索引 |
索引建立在一个函数或者从表中一个或多个属性计算出来的表达式上。表达式索引只有在查询时使用与创建时相同的表达式才会起作用。 |
- 创建一个普通表
gaussdb=# CREATE TABLE tpcds.customer_address_bak AS TABLE tpcds.customer_address; INSERT 0 0
- 创建普通索引
如果对于tpcds.customer_address_bak表,需要经常进行以下查询。
gaussdb=# SELECT ca_address_sk FROM tpcds.customer_address_bak WHERE ca_address_sk=14888;
通常,数据库系统需要逐行扫描整个tpcds.customer_address_bak表以查询所有匹配的元组。如果表tpcds.customer_address_bak的规模很大,但满足WHERE条件的只有少数几个(可能是零个或一个),则这种顺序扫描的性能就比较差。如果让数据库系统在ca_address_sk属性上维护一个索引,用于快速定位匹配的元组,则数据库系统只需要在搜索树上查询少数的几层就可以找到匹配的元组,这将会大大提高数据查询的性能。同样,在数据库中进行更新和删除操作时,索引也可以提升这些操作的性能。
执行如下命令创建索引。
gaussdb=# CREATE INDEX index_wr_returned_date_sk ON tpcds.customer_address_bak (ca_address_sk); CREATE INDEX
- 创建唯一索引
在表tpcds.ship_mode_t1上的SM_SHIP_MODE_SK字段上创建唯一索引。
gaussdb=# CREATE UNIQUE INDEX ds_ship_mode_t1_index1 ON tpcds.ship_mode_t1(SM_SHIP_MODE_SK);
- 创建多字段索引
假如用户需要经常查询表tpcds.customer_address_bak中ca_address_sk是5050,且ca_street_number小于1000的记录,使用以下命令进行查询。
gaussdb=# SELECT ca_address_sk,ca_address_id FROM tpcds.customer_address_bak WHERE ca_address_sk = 5050 AND ca_street_number < 1000;
执行如下命令在字段ca_address_sk和ca_street_number上定义一个多字段索引。gaussdb=# CREATE INDEX more_column_index ON tpcds.customer_address_bak(ca_address_sk ,ca_street_number ); CREATE INDEX
- 创建部分索引
如果只需要查询ca_address_sk为5050的记录,可以创建部分索引来提升查询效率。
gaussdb=# CREATE INDEX part_index ON tpcds.customer_address_bak(ca_address_sk) WHERE ca_address_sk = 5050; CREATE INDEX
- 创建表达式索引
假如经常需要查询ca_street_number小于1000的信息,执行如下命令进行查询。
gaussdb=# SELECT * FROM tpcds.customer_address_bak WHERE trunc(ca_street_number) < 1000;
可以为上述的查询创建表达式索引。gaussdb=# CREATE INDEX para_index ON tpcds.customer_address_bak (trunc(ca_street_number)); CREATE INDEX
- 删除tpcds.customer_address_bak表。
gaussdb=# DROP TABLE tpcds.customer_address_bak; DROP TABLE
更多详情请参考GaussDB 文档中心:https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/productdesc/qlh_03_0001.html
浙公网安备 33010602011771号