关于uuid与自增列的选择】的更多相关文章

关于uuid与自增列的选择 在db交流群里看到有人提问,说他的userName 登录名是唯一的,可以用其做主键嘛,如果用自增列,那又要多一列. 后面又说,如果要用主键ID,用uuid会不会好一些呢?作为新手的我也对这个问题发生了兴趣,百度检索下得出大致结论: uuid:可以简单的的理解为全球唯一标识符 一.缺点 1.无序性:uuid是无序的, 插入数据时,页的位置会发生变化,页分裂,速度慢.一般情况下主键是聚簇索引,会把相邻主键的数据安放在相邻的物理存储上.如果主键不是自增,而是随机的,那么频繁…
##=====================================================================================## 在数据库表设计中会纠结于”自然键”和”代理键”的选择,自然键在实现数据“软删除”时实现比较复杂,部分自然键因为键值过长或多列组合导致不适合作为表主键,而比较常见两种代理键为自增列(auto incremnet)和全局唯一标识列(GUID). 使用自增列作为主键的优缺点:1.    主键键值长度短,INT列需要4个字节,…
我们先了解下InnoDB引擎表的一些关键特征: InnoDB引擎表是基于B+树的索引组织表(IOT): 每个表都需要有一个聚集索引(clustered index): 所有的行记录都存储在B+树的叶子节点(leaf pages of the tree): 基于聚集索引的增.删.改.查的效率相对是最高的: 如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择其作为聚集索引: 如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引: 如果也没有这样的…
InnoDB引擎表的特点 1.InnoDB引擎表是基于B+树的索引组织表(IOT) 关于B+树 (图片来源于网上) B+ 树的特点: (1)所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的; (2)不可能在非叶子结点命中; (3)非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层; 2.如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引.如果没有显式定义主键,则InnoDB会选择第一个不包含有NU…
InnoDB引擎表是基于B+树的索引组织表(IOT): 每个表都需要有一个聚集索引(clustered index): 所有的行记录都存储在B+树的叶子节点(leaf pages of the tree): 基于聚集索引的增.删.改.查的效率相对是最高的: 如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择其作为聚集索引: 如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引: 如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的RO…
InnoDB引擎表的特点 1.InnoDB引擎表是基于B+树的索引组织表(IOT) 关于B+树 (图片来源于网上) B+ 树的特点: (1)所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的; (2)不可能在非叶子结点命中; (3)非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层; 2.如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引.如果没有显式定义主键,则InnoDB会选择第一个不包含有NU…
1 innodb 自增列出现重复值的问题 先从问题入手,重现下这个bug use test; drop table t1; create table t1(id int auto_increment, a int, primary key (id)) engine=innodb; ,);); ); select * from t1; +----+------+ | id | a | +----+------+ | | | +----+------+ ; ; select * from t1; +…
0   前言 用过 SQLserver 和 MySQL 的自增列(auto_increment),然而 Oracle 在建表设置列时却没有自增列. 查阅资料后发现 Oracle 的自增列需要手动编写. 1   序列  1.1.创建序列(sequence) create sequence [sequence_name] --创建序列 increment --递增步长为1 start --开始值为1 nomaxvalue --没有最大值 (设置最大值:maxvalue 1000) minvalue…
为什么要为innodb表设置自增列做主键? 1.使用自增列做主键,写入顺序是自增的,和B+数叶子节点分裂顺序一致 2.表不指定自增列做主键,同时也没有可以被选为主键的唯一索引,InnoDB就会选择内置的rowid作为主键,写入顺序和rowid增长顺序一致 所以InnoDB表的数据写入顺序能和B+树索引的叶子节点顺序一致的话,这时候存取效率是最高…
对于那些向带有自增列的表中插入行的语句,Innodb提供一种可配置的锁定机制,这种锁定机制可以显著提高SQL语句的可伸缩性和性能. Innodb中为了使用自增机制,自增列必须是索引的部份,从而可以使用等价查询.典型的做法是将自增列放在表的索引的第一个位置.   Innodb自增锁模式 自增锁模式是在启动的时候由参数innodb_autoinc_lock_mode指定的.   在讲innodb_autoinc_lock_mode之前,先了解一下以下名词: --"insert-like"语…