5、MyISAM和Innodb引擎(表级别)

数据存储文件

  • MyISAM数据存储文件有3个,索引和数据文件是分离的,非聚集的
    1).frm 表结构文件
    2).MYI 索引文件
    3).MYD 数据文件

  • Innodb数据存储文件有2个,索引和数据文件是合并的,聚集的,聚簇索引
    1).frm 表结构文件
    2).ibd 数据文件

MyISAM 数据结构

  • 主键索引

在这里插入图片描述

  • 非主键索引

在这里插入图片描述

由上图可看出,MyISAM引擎的主键索引 和非主键索引的数据结构是一样的,叶子节点都存着数据的物理位置,指向数据的磁盘位置

Innodb数据结构

  • 主键索引(聚簇索引)

在这里插入图片描述

  • 非主键索引(二级索引)
    在这里插入图片描述

Innodb的主键索引和非主键索引的数据结构有着巨大的不同
1)主键索引的叶子节点存储着数据,索引和数据是聚集的。
2)非主键索引的叶子节点指向的是主键。

Innodb为什么必须有主键,并且自增

  • 要根据主键建立主键索引,而且数据的存储是根据页(单位)来存储的,一个叶子节点的末尾指向下一个叶子节点的开始,方便按范围查询数据
  • 如果数据库建表的时候,不设置主键,那么系统会找出一个数据差别比较大的列作为主键,如果数据差异性都不太大,数据库会自动生成一个主键。

为什么UUID不能设置为主键

  • UUID为字符串,数据库将字符串解析为ASCI码来比较大小。查询的时候,都需要将字符串解析为ASCI码,来查询,效率低
  • 最严重的是插入。
    1)自增的主键,在插入的时候,假如其他页已经满了,会新建一个页,然后按照顺序插入到页
    2)UUID是随机生成的,不是按序排列的,有可能随机生成的UUID,解析为ASCI码的时候,是最小的。这样就会插入到已经满员的页中,会使数据结构中的度,开始分裂,影响平衡树,插入的代价很高

分库分表的主键怎么设置

根据初始ID 和步长设置主键
A1: 起始主键ID: 1 步长:3 主键:1,4,7,10
A2: 起始主键ID: 2 步长:3 主键:2,5,8,11
A3: 起始主键ID: 3 步长:3 主键:3,6,9,12

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值