为什么要使用自增ID作为主键】的更多相关文章

1.从业务上来说 在设计数据库时不需要费尽心思去考虑设置哪个字段为主键.然后是这些字段只是理论上是唯一的,例如使用图书编号为主键,这个图书编号只是理论上来说是唯一的,但实践中可能会出现重复的 情况.所以还是设置一个与业务无关的自增ID作为主键,然后增加一个图书编号的唯一性约束. 2.从技术上来说 如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页. 总的来说就是可以提高查询和插入的性能. 对InnoDB来说 1: 主键索引既存储…
前言:在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?本篇博客我们就来分析这个问题,探讨一下内部的原因. 本篇博客的目录 一:mysql程序实例 二:使用uuid和自增id的索引结构对比 三:总结 一:mysql和程序实例 1.1:要说明这个问题,我们首先来建立三张表,分别是user_auto_key,use…
在数据库开发中,很多时候建一个表的时候会使用一个数字类型来作为主键,使用自增长类型自然会更方便,只是本人从来不喜欢有内容不在自己掌控之中,况且自增长类型在进行数据库复制时会比较麻烦.所以本人一直使用自己生成最大数字来保存主键.只是多任务同时写入数据库时,就偶尔会有主键冲突的情况出现了.因为得到最大数值时的查询语句如果同时进行就会出现相同的数字ID了.考虑到如果进行锁表的代价比较大,所以经过考虑,还是在一个表中保存最大ID这种速度快并且锁定的代价很小.本人使用SqlServer2008R2数据库,…
答:解1:  select top 10 * from A where id not in (select top 30 id from A) 解2:  select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A) 首先就拿解1来select top 10 * from A表示取出前十条的数据 select top 30 id from A表示取出前30条的数据 现是取出大于30条的数…
select top 10 * from (select ROW_NUMBER() over(order by Id) as rows,* from Customer) as C where C.rows>30 order by Id select top 10 * from Customer where id not in(select top 30 Id from Customer order by Id)order by Id select top 10 * from Customer w…
解1: select top 10 * from A where id not in (select top 30 id from A) 解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as  普通做法 select top 10 productid from Production.Product where productid not in( select top 30 p…
测试缘由 一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿实际的案例来说服他,所以准备做一个详细的测试.  作为互联网公司,一定有用户表,而且用户表UC_USER基本会有百万记录,所以在这个表基础上准测试数据来进行测试.           测试过程是目前我想到的多方位的常用的几种类型的sql进行测试,当然可能不太完善,欢迎大家留言提出更加完善的测试方案或…
  主键类型 SQL语句 运行时间 (秒)   (1)模糊范围查询1000条数据,自增ID性能要好于UUID 自增ID SELECT SQL_NO_CACHE t.* FROM test.`UC_USER` t WHERE t.`MOBILE` LIKE '147%' LIMIT 1000; 2.398 UUID SELECT SQL_NO_CACHE t.* FROM test.`UC_USER_PK_VARCHAR_1` t WHERE t.`MOBILE` LIKE '147%' LIMI…
有一个表StuInfo,里面只有两列 StuID,StuName其中StuID是int型,主键,自增列.现在我要插入数据,让他自动的向上增长,insert into StuInfo(StuID,StuName) values(????) 如何写? INSERT INTO StuInfo(StuID,StuName) VALUES (NULL, `字符`)或者INSERT INTO StuInfo(StuName) VALUES (`字符`) INSERT和REPLACE语句的功能都是向表中插入新…
导读:在使用MySQL建表时,我们通常会创建一个自增字段(AUTO_INCREMENT),并以此字段作为主键.本篇文章将以问答的形式讲述关于自增id的一切. 注: 本文所讲的都是基于Innodb存储引擎. 1.MySQL为什么建议将自增列id设为主键? 如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引.如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引.如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID…