参考 https://thisdataguy.com/2015/01/05/vertica-some-uses-of-sequences/

在 vertica 中有三种定义 identity 字段的方法, 分别是使用 AUTO_INCREMENTIDENTITYsequence.

简单对比:

  • AUTO_INCREMENT 同 SQL Server 的概念一样, sequence 和 Oracle 的概念是一样.
  • AUTO_INCREMENT 或 IDENTITY 字段都是直接在表定义时设定的, sequence 是一个独立的对象.
  • AUTO_INCREMENT 可以设定的参数最少, 不能设定起始值和增量.
  • IDENTITY 可设定的参数稍微多一些, 能设定起始值和增量.
  • sequence 可设定的参数很多.
  • 从使用的方便性看 AUTO_INCREMENT 或 IDENTITY 最方便了, 但灵活性不如 sequence.

推荐使用 sequence 作为 id 栏位, 尽量不要用 AUTO_INCREMENT 或 IDENTITY, 原因有:

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

在数仓项目中, 推荐为不同的 table 设置不同的 sequence, 不要共用, 原因就是上面的 #3.

下面是一个同时使用 seq 和 AUTO_INCREMENT 的示例:

create sequence mydb.my_seq;
CREATE TABLE mydb.test2 (
id1 numeric(38,0) DEFAULT NEXTVAL('my_seq')
,id2 AUTO_INCREMENT
)
SEGMENTED BY HASH(id1) ALL NODES;
;

最新文章

  1. 学习ASP.NET Core, 怎能不了解请求处理管道[3]: 自定义一个服务器感受一下管道是如何监听、接收和响应请求的
  2. BSBuDeJie_01
  3. python day2 字符串的方法
  4. 3DMax 常用快捷键
  5. background和background-size
  6. JavaScript 类定义常用方法(转)
  7. docker 中运行 redis 服务
  8. [LeetCode OJ] Decode Ways
  9. Cmpletepack coming~^.^
  10. mongo数据库基础
  11. Eclipse插件:mybatis generator的使用步骤
  12. python3+cv2+andiord安卓摄像头
  13. [PHP] PHP多进程处理tcp连接
  14. Shell 变量替换及测试
  15. Struts1的基础知识
  16. 异步测试celery
  17. Linux下设置oracle环境变量
  18. centos 7 升级/安装 git 2.7.3
  19. Java第十次作业--多线程
  20. 【文文殿下】CF1098C Construct a tree 题解

热门文章

  1. 【CF734F】Anton and School(构造)
  2. Codeforces | CF1037D 【Valid BFS?】
  3. String Reconstruction (并查集)
  4. NOIP2008双栈排序(贪心)
  5. 利用ansible批量部署zabbix-agent
  6. nodejs的某些api~(一)node的流2
  7. 粉红猪小妹peppa pig中英文版209集+218本绘本+音频
  8. java 判断元素是否在数组内
  9. HEOI2019退役总结
  10. COGS 2392 2393 2395 有标号的二分图计数