Vertica 自增序列使用 IDENTITY SEQUENCE

本文对比了AUTO_INCREMENT、IDENTITY和SEQUENCE三种数据库自增ID方法,详细解析了它们的特性与应用场景。SEQUENCE因其高度灵活性和优化潜力,被推荐为最佳实践,尤其是在批量操作和多节点环境下。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1.三种方法

  • AUTO_INCREMENT
  • IDENTITY
  • SEQUENCE
 

2.简单对比

  • AUTO_INCREMENT 或 IDENTITY 字段都是直接在表定义时设定的, SEQUENCE是一个独立的对象
  • AUTO_INCREMENT 可以设定的参数最少, 不能设定起始值和增量
  • IDENTITY 可设定的参数稍微多一些, 能设定起始值和增量
  • SEQUENCE可设定的参数很多
  • AUTO_INCREMENT 和 IDENTITY使用起来方便,但是灵活性没有SEQUENCE高
 

3.推荐使用SEQUENCE的原因

  • 如果某个表有 AUTO_INCREMENT 或 IDENTITY 栏位, 在有删除记录的情况下, 再复制一个新表, 新表 id 和 原表 id 就不一致了
  • Vertica 建表 DDL 中, 可以为 id 栏位设定默认值为某个SEQUENCE, 这样方便性就和 AUTO_INCREMENT 或 IDENTITY 一样了
  • quence 可以有更多的调优手段, 比如某个表经常要做 bulk copy, 可以为 seq 设定较大的 cache, 以提升 copy 的速度, 如果表的插入频率不大, 可以将 seq 的 cache 设的小一些, 以减少内存的使用
  • 推荐每一个表单独使用一个SEQUENCE
 

4.SEQUENCE语法

CREATE SEQUENCE [ IF NOT EXISTS ] [[database.]schema.]sequence
... [ INCREMENT [ BY ] integer ]
... [ MINVALUE integer | NO MINVALUE ]
... [ MAXVALUE maxvalue | NO MAXVALUE ]
... [ START [ WITH ] integer ]
... [ CACHE integer | NO CACHE ]
... [ CYCLE | NO CYCLE ]
默认指定每个节点每个缓存设置250000个编号,不推荐使用NO CACHE的设置,虽然能够使序列递增+1,但是性能会受到严重的影响,每次+1都会有分布式锁。在vsql中使用序列SEQUENCE进行INSERT时,需要最后执行commit提交,但是jdbc中是自动commit的。
 

5.使用示例

(1)创建和删除序列
DROP SEQUENCE IF EXISTS test.version_sequence;
CREATE SEQUENCE test.version_sequence INCREMENT BY 1 START WITH 1;
(2)建表使用序列
-- 删除序列时,如果有依赖的表,那么将不能被删除,需要先删除表,再删除序列
-- 创建表,主键使用序列
CREATE TABLE test.version
(
    id int DEFAULT NEXTVAL('test.version_sequence'),
    version varchar(255) NOT NULL,
    detailed_version varchar(255) NOT NULL,
    parent_version varchar(255),
    procedure_name varchar(255),
    function_name varchar(255),
    PRIMARY KEY(id)
);
(3)插入语句
INSERT INTO test.version (id,version,detailed_version,parent_version,procedure_name,function_name) 
VALUES (default,'1.0.0','D991','','','');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值