MySQL面试题之为什么要为innodb表设置自增列做主键?

为什么要为innodb表设置自增列做主键?

1.使用自增列做主键,写入顺序是自增的,和B+数叶子节点分裂顺序一致

2.表不指定自增列做主键,同时也没有可以被选为主键的唯一索引,InnoDB就会选择内置的rowid作为主键,写入顺序和rowid增长顺序一致

所以InnoDB表的数据写入顺序能和B+树索引的叶子节点顺序一致的话,这时候存取效率是最高

原文地址:https://www.cnblogs.com/FengGeBlog/p/10284284.html

时间: 2024-08-11 10:50:29

MySQL面试题之为什么要为innodb表设置自增列做主键?的相关文章

mysql中InnoDB表为什么要建议用自增列做主键

InnoDB引擎表的特点 1.InnoDB引擎表是基于B+树的索引组织表(IOT) 关于B+树 (图片来源于网上) B+ 树的特点: (1)所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的; (2)不可能在非叶子结点命中; (3)非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层; 2.如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引.如果没有显式定义主键,则InnoDB会选择第一个不包含有NU

[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键

[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键 http://imysql.com/2014/09/14/mysql-faq-why-innodb-table-using-autoinc-int-as-pk.shtml 我们先了解下InnoDB引擎表的一些关键特征: InnoDB引擎表是基于B+树的索引组织表(IOT): 每个表都需要有一个聚集索引(clustered index): 所有的行记录都存储在B+树的叶子节点(leaf pages of the tree):

mysql插入数据 报错[Err] 1136 - Column count doesn't match value count at row 1(表中有自增列)

版本:8.0.16 创建了一张表:create table user_table(uid int primary key auto_increment,uname varchar(10))auto_increment=1 插入数据报错: 经查找 ,有三种方式可以解决这个问题: 1.插入数据得时候,带入列名: insert into user_table("uname") values ("刘一") 2.自增键这列设置为0 insert into user_table

Mysql 自增列 主键

Mysql中假如有 ID Int auto_increment, CID varchar(36). 通常情况下都是 ID设置为主键. 假如要设置CID为主键.自增列ID必需是唯一索引. create table Temp ( ID bigint not null auto_increment comment '编号', CID varchar(36) not null, CreateTime datetime not null default now() comment '创建时间', uniq

MySQL使用AUTO_INCREMENT列的表注意事项之update自增列篇

1. 说明 (1)对于MyISAM表,如果用UPDATE更新自增列,如果列值与已有的值重复,则会出错:如果大于已有的最大值,则会自动更新表的AUTO_INCREMENT,操作是安全的. (2)对于innodb表,update auto_increment字段,如果列值与已有的值重复,则会出错:如果大于已有的最大值,可能会引入一个坑,会造成编号重复错误,插入数据失败的情况,可见在update自增列值是要注意. 环境描述:RHEL 6.4 x86_64 + MySQL 5.6.19 blog地址:h

MySQL InnoDB表--BTree基本数据结构

MySQL InnoDB表是索引组织表这一点应该是每一个学习MySQL的人都会首先学到的知识,这代表这表中的数据是按照主键顺序存储,也就是说BTree的叶子节点存储了所有该行的数据. 我最开始是搞Oracle的,头一次接触MySQL的时候,默认引擎还是MyISAM.当时我看到公司建立的所有的InnoDB表都会在第一列加一个业务无关的自增主键,我觉得很没有必要,问了些人这么做的意义,得到的答案也是让人搞不懂,其实也都没有说到根本上,只是说这样据说效率会更好.于是我在数据仓库项目的建设时普遍没有采用

mysql面试题总结

1. 主键 超键 候选键 外键 1)超键(super key) :在关系中能唯一标识元组的属性集称为关系模式的超键 2)候选键(candidate key):不含有多余属性的超键称为候选键 3)主键(primary key):用户选作元组标识的一个候选键程序主键 4)外键(foreign key):如果关系模式R1中的某属性集不是R1的主键,而是另一个关系R2的主键则该属性集是关系模式R1的外键 实例讲解 假设有如下两个表: 学生(学号,姓名,性别,身份证号,教师编号) 教师(教师编号,姓名,工

MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)

测试缘由 一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿实际的案例来说服他,所以准备做一个详细的测试.   作为互联网公司,一定有用户表,而且用户表UC_USER基本会有百万记录,所以在这个表基础上准测试数据来进行测试.            测试过程是目前我想到的多方位的常用的几种类型的sql进行测试,当然可能不太完善,欢迎大家留言提出更加完善的测试方

怎么重置mysql的自增列AUTO_INCREMENT初时值

重置 MySQL 自增列 AUTO_INCREMENT 初时值 注意, 使用以下任意方法都会将现有数据删除. 方法一: delete from tb1; ALTER TABLE tbl AUTO_INCREMENT = 100; 1 2 (好处, 可以设置 AUTO_INCREMENT 为任意值开始) 提示:如果表列和数据很多, 速度会很慢, 如90多万条, 会在10分钟以上. 方法二: truncate tb1; 1 (好处, 简单, AUTO_INCREMENT 值重新开始计数.) 怎么重置