首页 > 数据库 > > 其他操作-创建和管理索引
索引可以提高数据的访问速度,但同时也增加了插入、更新和删除操作的处理时间。所以是否要为表增加索引,索引建立在哪些字段上,是创建索引前必须要考虑的问题。需要分析应用程序的业务处理、数据使用、经常被用作查询的条件或者被要求排序的字段来确定是否建立索引。
索引建立在数据库表中的某些列上。因此,在创建索引时,应该仔细考虑在哪些列上创建索引。
说明:创建分区表的步骤请参考创建和管理分区表。
CREATE INDEX tpcds_web_returns_p2_index1 ON tpcds.web_returns_p2 (ca_address_id) LOCAL;当结果显示为如下信息,则表示创建成功。
CREATE INDEX创建分区索引tpcds_web_returns_p2_index2,并指定索引分区的名字。
CREATE INDEX tpcds_web_returns_p2_index2 ON tpcds.web_returns_p2 (ca_address_sk) LOCAL
(
PARTITION web_returns_p2_P1_index,
PARTITION web_returns_p2_P2_index TABLESPACE example3,
PARTITION web_returns_p2_P3_index TABLESPACE example4,
PARTITION web_returns_p2_P4_index,
PARTITION web_returns_p2_P5_index,
PARTITION web_returns_p2_P6_index,
PARTITION web_returns_p2_P7_index,
PARTITION web_returns_p2_P8_index
) TABLESPACE example2;
当结果显示为如下信息,则表示创建成功。
CREATE INDEX修改索引分区的表空间
ALTER INDEX tpcds.tpcds_web_returns_p2_index2 MOVE PARTITION web_returns_p2_P2_index TABLESPACE example1;当结果显示为如下信息,则表示修改成功。
ALTER INDEX修改索引分区web_returns_p2_P3_index的表空间为example2。ALTER INDEX tpcds.tpcds_web_returns_p2_index2 MOVE PARTITION web_returns_p2_P3_index TABLESPACE example2;当结果显示为如下信息,则表示修改成功。
ALTER INDEX重命名索引分区
ALTER INDEX tpcds.tpcds_web_returns_p2_index2 RENAME PARTITION web_returns_p2_P8_index TO web_returns_p2_P8_index_new;当结果显示为如下信息,则表示重命名成功。
ALTER INDEX查询索引
SELECT RELNAME FROM PG_CLASS WHERE RELKIND='i';执行如下命令查询指定索引的信息。
\di+ tpcds.tpcds_web_returns_p2_index2删除索引
DROP INDEX tpcds.tpcds_web_returns_p2_index1;
DROP INDEX tpcds.tpcds_web_returns_p2_index2;
当结果显示为如下信息,则表示删除成功。
DROP INDEXGaussDB 200支持4种创建索引的方式请参见表1。
说明:索引方式 | 描述 |
|---|---|
唯一索引 | 可用于约束索引属性值的唯一性,或者属性组合值的唯一性。如果一个表声明了唯一约束或者主键,则GaussDB 200自动在组成主键或唯一约束的字段上创建唯一索引(可能是多字段索引),以实现这些约束。目前,GaussDB 200只有B-Tree可以创建唯一索引。 |
多字段索引 | 一个索引可以定义在表中的多个属性上。目前,GaussDB 200中的B-Tree支持多字段索引,且最多可在32个字段上创建索引。 |
部分索引 | 建立在一个表的子集上的索引,这种索引方式只包含满足条件表达式的元组。 |
表达式索引 | 索引建立在一个函数或者从表中一个或多个属性计算出来的表达式上。表达式索引只有在查询时使用与创建时相同的表达式才会起作用。 |
CREATE TABLE tpcds.customer_address_bak AS TABLE tpcds.customer_address;
INSERT
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属性上维护一个索引,用于快速定位匹配的元组,则数据库系统只需要在搜索树上查找少数的几层就可以找到匹配的元组,这将会大大提高数据查询的性能。同样,在数据库中进行更新和删除操作时,索引也可以提升这些操作的性能。
使用以下命令创建索引。
CREATE INDEX index_wr_returned_date_sk ON tpcds.customer_address_bak (ca_address_sk);
CREATE INDEX
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上定义一个多字段索引。
CREATE INDEX more_column_index ON tpcds.customer_address_bak(ca_address_sk ,ca_street_number );
CREATE INDEX
如果只需要查询ca_address_sk为5050的记录,可以创建部分索引来提升查询效率。
CREATE INDEX part_index ON tpcds.customer_address_bak(ca_address_sk) WHERE ca_address_sk = 5050;
CREATE INDEX
SELECT * FROM tpcds.customer_address_bak WHERE trunc(ca_street_number) < 1000;可以为上面的查询创建表达式索引:
CREATE INDEX para_index ON tpcds.customer_address_bak (trunc(ca_street_number));
CREATE INDEX
DROP TABLE tpcds.customer_address_bak;
DROP TABLE来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3167934/ ,如需转载,请注明出处,否则将追究法律责任。