在南大通用GBase 8c数据库分布式场景下,主键、外键和索引的创建与分布列(distribution column)紧密相关。
分布列是用于决定在分布式系统中数据如何分布的列。主键通常用于确保数据的唯一性,并且在分布式数据库中,主键的选择对数据分布有重要影响。
在GBase分布式数据库中,创建表时可以指定分布列,主键通常包含分布列。
创建表时指定分布列和主键的语法:
CREATE TABLE table_name (
column1 datatype [NOT NULL],
column2 datatype,
PRIMARY KEY (column1, column2)
) DISTRIBUTE BY HASH (column1);
在这个例子中,column1是分布列,也是主键的一部分。数据将根据column1的值进行哈希分布(HASH)。
在分布式数据库中,外键约束通常也需要考虑分布列,以确保数据的一致性和完整性。外键列应该与父表的分布列对齐,以避免跨节点的外键约束检查。
创建外键时考虑分布列的语法:
CREATE TABLE child_table (
column1 datatype,
column2 datatype,
FOREIGN KEY (column1) REFERENCES parent_table(column1)
) DISTRIBUTE BY HASH (column1);
在这个例子中,表child_table的列column1是外键,引用了表parent_table的列column1。两个表都以column1作为分布列,确保了外键约束的有效性。
索引在分布式数据库中也与分布列有关。通常,索引应该包含分布列,以优化查询性能和数据访问模式。
创建索引时包含分布列的语法:
CREATE INDEX index_name ON table_name (column1, column2);
根据前面示例,column1是分布列,column2是另一个列。创建索引时包含分布列可以帮助优化查询,特别是在执行连接操作时。
使用建议:
通过合理设计和使用分布列,可以显著提高GBase分布式数据库的性能和可扩展性。
在分布式数据库中,创建组合索引时,对于HASH分布表,主键和唯一索引必须包含分布键。这意味着,如果你的表是HASH分布的,那么在创建组合索引时,必须包含分布列作为索引的一部分。这样做可以确保数据在分布式系统中正确分布,同时提高查询效率。
合理设计组合索引,避免冗余。例如已对(a,b,c)创建索引,则不应再单独对(a)、(b)、(c)、(a,b)、(b,c)创建索引。
当查询时如果只带有a字段上的过滤条件,一般也会利用组合索引进行查询。
对于分区表创建索引时,需要注意:
此外,全局二级索引(Global Secondary Index,简称GSI)允许用户定义与基表分布不一致的索引,从而实现非基表分布键点查/点查和范围查询性能提升,去除UNIQUE/PRIMARY KEY需包含基表分布键的约束
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69979120/viewspace-3093084/ ,如需转载,请注明出处,否则将追究法律责任。