云数据库 GAUSSDB-CREATE INDEX:注意事项

时间:2024-11-13 14:46:21

注意事项

  • 基表为HASH分布时,若创建不包含基表分布键的主键或唯一索引,需要使用全局二级索引(CREATE GLOBAL INDEX),若创建包含基表分布键的主键或唯一索引,需要使用普通索引(CREATE INDEX),单DN部署形式下,使用全局二级索引或者普通索引均可创建成功;当基表为除HASH分布以外的其他分布形式时,主键或唯一索引只能使用普通索引(CREATE INDEX),即索引键必须包含基表分布键。
  • 索引自身也占用存储空间、消耗计算资源,创建过多的索引将对数据库性能造成负面影响(尤其影响数据导入的性能,建议在数据导入后再建索引)。因此,仅在必要时创建索引。
  • 索引定义里的所有函数和操作符都必须是immutable类型的,即它们的结果必须只能依赖于它们的输入参数,而不受任何外部的影响(如另外一个表的内容或者当前时间)。这个限制可以确保该索引的行为是定义良好的。要在一个索引上或WHERE中使用用户定义函数,请把它标记为immutable类型函数。
  • 分区表索引分为LOCAL索引与GLOBAL索引,LOCAL索引与某个具体分区绑定,而GLOBAL索引则对应整个分区表。
  • 被授予CREATE ANY INDEX权限的用户,可以在public模式和用户模式下创建索引。
  • 禁止其他用户在初始用户的表上创建包含用户自定义函数的表达式索引。
  • 如果基表是HASH/RANGE/LIST分布,则创建唯一索引时必须包含基表的分布键,且不能含有表达式。
  • 如果表达式索引中调用的是用户自定义函数,按照函数创建者权限执行表达式索引函数。
  • 不支持XML类型数据作为普通索引、UNIQUE索引、GLOBAL索引、LOCAL索引、部分索引。
  • 在线创建索引的类型只支持btree索引和ubtree索引。索引创建形式只支持非分区表普通索引及分区表GLOBAL索引、LOCAL索引,不支持PCR ubtree索引、二级分区与GSI。在线并行创建索引只支持Astore及Ustore的普通索引、GLOBAL索引、LOCAL索引。
  • CREATE INDEX创建索引可能会改变表的访问方式从而导致查询执行计划改变。
  • 当创建索引的SQL语句过长(长度大于等于5250字符)时,会上报一条WARNING,建议缩短创建索引语句的长度。

    创建索引的SQL语句过长时,可能会在备份恢复索引时发生失败。由于备份恢复创建索引语句由gs_dump导出,gs_dump在导出索引定义时会对函数名、条件、列名进行添加引号、括号和列的类型的操作,原SQL语句会变得更长,进而导致该语句对应的pg_index元组不能存到一个页面上,造成创建索引失败。

support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0549.html