26 MYSQL 自增主键
自增主键为什么不连续
1. 自增值
1.1 自增值的保存
表的结构定义存放在后缀名为.frm 的文件中,但是并不会保存自增值。不同的引擎对于自增值的保存策略不同。
自增主键为什么不连续
表的结构定义存放在后缀名为.frm 的文件中,但是并不会保存自增值。不同的引擎对于自增值的保存策略不同。
什么时候使用 Memory 存储引擎
假设有以下的两张表 t1 和 t2,其中表 t1 使用 Memory 引擎, 表 t2 使用 InnoDB 引擎。
|
|
InnoDB 表的数据放在主键索引树上,主键索引是 B+ 树。所以表 t2 的数据组织方式如下图所示:主键索引上的值是有序存储的。
什么时候会使用临时表
create table … engine=memory。这种表的数据都保存在内存里,系统重启的时候会被清空,但是表结构还在。除了这两个特性看上去比较“奇怪”外,从其他的特征上看,它就是一个正常的表。
join 语句是怎么执行的
|
|
这两个表都有一个主键索引 id 和一个索引 a,字段 b 上无索引。存储过程 idata() 往表 t2 里插入了 1000 行数据,在表 t1 里插入的是 100 行数据。
count,order by 都是怎么执行的
在不同的 MySQL 引擎中,count(*) 有不同的实现方式:
由于 Innodb 事务是基于 MVCC 的多版本控制机制实现的,每一行记录都要判断自己是否对这个会话可见,因此对于 count(*) 请求来说,InnoDB 只好把数据一行一行地读出依次判断,可见的行才能够用于计算“基于这个查询”的表的总行数。对于 count(*) 遍历主键索引和二级索引得到的结果逻辑上是一致的。MySQL 优化器会找到最小的那棵树来遍历。在保证逻辑正确的前提下,尽量减少扫描的数据量,是数据库系统设计的通用法则之一。
怎么最快的复制一张表
如果可以控制对源表的扫描行数和加锁范围很小的话,我们简单地使用 insert … select 语句即可实现。当然,为了避免对源表加读锁,更稳妥的方案是先将数据写到外部文本文件,然后再写回目标表。这时,有三种常用的方法。