innodb行记录
b+树叶节点存放的是一整行数据
非叶节点存放键值(如果是主键索引 就是主键)和指针(下一层的位置 pageno)
各个页是通过指针连接的,逻辑上是有序的,如图1
聚集索引记录存在以下系统列
rowid:b+树索引键值 否则就是用户的pk值
trx id
roll pointer
如果有唯一非空索引,也可以作为主键;如果有两个唯一非空索引,第一个定义的为主键。
select a,b,c,_rowid from abcd;
如果主键值不是int类型 rowid返回不了
怎么查看主键值??? 用元数据表查看 desc abcd;
create table abcd(
a varchar(20),
b varchar(20) not null,
c varchar(20) not null,
unique key(a),
unique key(c),
unique key(b))
c为主键
系统主键对用户不可见rowid 6字节
innodb另外两个隐藏的列(存放在每行记录里,myisam没有)
trx id 6字节 roll pointer 7字节
如果a b两个innodb表都没有主键 系统建的rowid是1 2 3自增的吗???主键值是共用的(全局rowid)sys_rowid
如果系统创建的主键 _rowid是查不出来的
记录格式由row-format决定
innodb_default_row_format
redudent:老的
compact;5.6默认
char和varchar的区别 varchar不能原地更新
字符集utf8mb4
char(N) N是字符数 填充字节
字符型数据如何在页中存放,如图2
页分裂之前 如果有碎片页,reognized一下 ( 在内存中)将碎片释放出来
analyze table
hexdump每个页
三层树可以有多少条记录,如图3
怎么查看b加树的层数???
dynamic记录格式优化大对象记录的存储
一个页能存放的记录越多,则性能越优
如果某个字段 text类型 20000字节 一个页不够
compact:a |b|c|d(768字节/20字节指针)???
innodb_file_format=Barracuda
b+树索引可以快速定位到一条记录(错误)
b+树索引只能快速定位到记录所在的页(正确)