开发者

浅析GBase8s 唯一索引与非唯一索引问题

开发者 https://www.devze.com 2022-11-30 01:03 出处:网络 作者: 心海平凡
唯一索引在列中不允许重复的值出现,可以用来定义和约束表中的一列或者多列组合值,在执行insert和update语句时需要检查唯一性。GBase8s中主键(PRIMARYKEY)会自动创建一个唯一索引...

唯一索引在列中不允许重复的值出现,可以用来定义和约束表中的一列或者多列组合值,在执行insert和update语句时需要检查唯一性。GBase8s中主键(PRIMARY KEY)会自动创建一个唯一索引。一个良好的表设计都应该定义主键或者唯一约束索引。特别是在OLTP系统中,唯一索引可以帮助快速定位少量记录。

唯一索引的创建语法:

CREATE UNIQUE INDEX idx_name ON tabname(col);

或者

CREATE DISTINCT INDEX idx_name ON tabname(col);

非唯一索引(可重复索引)可以在非主键列中创建,允许在列中出现重http://www.devze.com复的数据。但需要避免子键过于重复的数据列上创建索引,因为重复值越多的索引,其效率越低。

唯一索引与非唯一索引的实例图如下:

浅析GBase8s 唯一索引与非唯一索引问题

注意:由于需要在insert、update时进行唯一性判断,所以不建议在一个表上创建多个唯一索引。为了确保唯一性要求,一般在一张表中创建唯一索引就足够了。

补充:GBase 8s数据库表和主键索引使用的空间分离方法

GBase 8s数据库创建主键时一般情况下有两种方法:

1,创建表时指定主键,如:

create 编程客栈table tab1
(
 id int,
 name varchar(255),
 primary key(id)
) in datadbs01;

2,使用alter语句修改表结构的方式创建主键

create table tab1
(
 id int,
 name va编程客栈rchar开发者_Elasticsearch(255)
) in datadbs01;
alter table tab1 add constraint primary key(id);

这两种方法都无法为主键自动创建的索引指定单独的空间。

其实有一种变通的方式,可以将表使用的空间和主键索引使用的空间分离开,需要在方法2前加上创建唯一索引(即:不让alter table add primary key自动创建索引,而是使用刚创建的唯一索引),具体如下:

-- 创建表,使用datadbs01空间
create table tab1
(
 id int,
 name varchar(255)
) in datadbs01;
-- 创建唯一索引,http://www.devze.com使用indexdbs01空间
create unique index ix_tab1_id on tab1(id) in indexdbs01;
-- 修改表,创建主键(关联唯一索引)
alter table tab1 add constraint primary key(id);

到此这篇关于GBase8s 唯一索引与非唯一索引的文章就介绍到这了,更多相关GBase8s 索引内编程客栈容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

0

精彩评论

暂无评论...
验证码 换一张
取 消