`
tower
  • 浏览: 239203 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

innodb 存储引擎为什么要用一个自增的主键呢?

 
阅读更多


 innodb 存储引擎为什么要用一个自增的主键呢?
 
我们来看看innodb的存储,
 
 
每个表在磁盘上,是单独的一个文件。索引和数据都在其中,文件是按照主键索引组织的一个B+TREE结构。
 

 
 
因为B+TREE是有序的一个数据结构,所以从效率的角度,主键最好也是一个有序的,这样可以有效的防止B+TREE的不断分裂调整。同时也保证了按照时间顺序进去的数据在存储上也是一个相对顺序的存放。这个不仅对insert,同时对有时间条件的范围查询,也能大大提高效率。
 
同时mysql 5.1后,对自增的主键的优化也有很多。
 
这种按照索引组织数据的方式,简称IOT,还有一种方式,叫heap table,堆表。
 
这个问题,我发现有两种人特别容易采坑:
1、从Oralce转过来使用MySQL的人。因为Oracle是heap table 和 IOT都实现了,而且默认是按照heap table的方式进行存储。
2、Hibernate的重度使用者。很多早期的Hibernate教程,会建议为了移植数据库方便,会建议主键使用UUID
 
所以,innodb下的表,如果有足够的数据量,毫不怀疑的加一个自增主键。存量系统需要改造的话,在原表上加一个自增主键,原表的主键改成一个唯一索引降格为Secondary Index即可。
 

 

  • 大小: 18.5 KB
  • 大小: 87.6 KB
分享到:
评论

相关推荐

    为什么说InnoDB必须要有主键并且推荐使用自增整型主键呢?

    1.InnoDB存储引擎的数据结构必须需要一个主键才可以组织起来,如果用户使用InnoDB存储引擎建立表的时候,没有指定主键,则Mysql会自动的帮你找到一个合适的唯一索引作为主键,若找不到符合条件唯一索引条件的字段时...

    MySQL经典面试题29道

    1、为什么要尽量设定一个主键? 主键是数据库确保数据行在整张表唯一性的保障,即使业务上本张表没有主键,也建议添加一个自增长的ID列作为主键。 设定了主键之后,在后续的删改查的时候可能更加快速以及确保操作...

    mysql储存相关的面试题目精选

    3、InnoDB 为何推荐使用自增主键? 自增 ID 可以保证每次插入时 B+ 树索引是从右边扩展的,因此相比自定义 ID (如 UUID)可以避免 B+ 树的频繁合并和分裂。如果使用字符串主键和随机主键,会使得数据随机插入,效率...

    精选MySQL 55道面试题与答案.docx

    1、一张表,里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记录的 ID 是 18 还是 15 ? (1)如果表的类型是 MyISAM,那么是 18 因为 MyISAM...

    mysql面试题-mysql面试题

    1、一张表,里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记录的 ID 是 18 还是 15 ? (1) 如果表的类型是 MyISAM,那么是 18 因为 ...

    常见(MySQL)面试题(含答案).docx

    innodb为什么要用自增id作为主键 MySql索引是如何实现的 说说分库与分表设计(面试过) 聚集索引与非聚集索引的区别 事务四大特性(ACID)原子性、一致性、隔离性、持久性? 事务的并发?事务隔离级别,每个级别会...

    关于Mysql自增id的这些你可能还不知道

    在使用MySQL建表时,我们通常会创建一个自增字段(AUTO_INCREMENT),并以此字段作为主键。本篇文章将以问答的形式讲述关于自增id的一切。 注: 本文所讲的都是基于Innodb存储引擎。 下面话不多说了,来一起随着小编...

    MySQL面试题精选35题

    1.说一下 MySQL 执行一条查询语句的内部执行过程? 2.MySQL 查询缓存有什么优缺点? 3.MySQL 的常用引擎都有哪些? 4.常用的存储引擎 InnoDB 和 ...18.InnoDB 为什么要使用 B+ 树,而不是 B 树、Hash、红黑树或二叉树?

    MySQL经典面试题(含答案).zip

    主键使用自增ID还是UUID? 超大分页怎么处理? 一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录。 日常开发中你是怎么优化SQL的? 关心过业务系统...

    关于mysql自增id,你需要知道的

    导读:在使用MySQL建表时,我们通常会创建一个自增字段(AUTO_INCREMENT),并以此字段作为主键。本篇文章将以问答的形式讲述关于自增id的一切。 注: 本文所讲的都是基于Innodb存储引擎。 1.MySQL为什么建议将自增列...

    最新150道MySQL大厂面试题课程

    014.使用int自增主键后 最大id是10,删除id 10和9,再添加一条记录,最后添加的id是几? 015.索引的优缺点是什么? 016.使用索引一定能提升效率吗? 017.如果是大段文本内容,如何创建(优化)索引? 018.什么是聚簇...

    MySQL面试题,经典

    1、一张表,里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 Mysql 重启,再 insert 一条记录,这条记录的 ID 是 18 还是 15 2、Mysql 的技术特点是什么 3、Heap 表是什么 4、...

    100道mysql的面试题

    MySQL事务得四大特性以及实现原理,如何写sql能够有效的使用到复合索引,数据库自增主键遇到的问题,MVCC,主从同步延迟,为什么需要数据库连接池, InnoDB引擎中的索引策略,Blob和text有什么区别,Mysql中有哪几种...

    【数据库】浅析Innodb的聚集索引与非聚集索引

    Mysql存储引擎之一的Innodb的索引,可以分为聚集索引与非聚集索引,这两种索引都是使用B+树组织的。 本文不讲解什么是索引,对索引不了解的同学可以先移步到我的另外一篇文章【数据库】mysql索引简谈 在分析这两种...

    sql总结.doc

    如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,也要花费一定的时间。 2.修改限制:当用户试图修改视图的某些行时,数据库必须把它转化为对基本表的某些行的修改。对于简单视图来说,...

    mysql基础只是总结

    例题1:创建一个表用于存储用户上传的文件信息 (文件的原始名,大小,路径,文件名,类型,上传人,是否共享) 例题2:创建一个表用于存储用户注册信息 (用户名,密码,id,email,安全问题,安全问题答案) 例题3:创建一个...

    MySQLDBA运维笔记.pdf

    1.3.7 不要给一个用户管所有的库,尽量专库专用户...............................................21 1.3.8 清理 mysql 操作日志文件~/mysql_history.........................................................21 ...

Global site tag (gtag.js) - Google Analytics