【Mysql存储引擎与底层数据结构】

索引名词疑问点:

聚集索引 == 聚簇 索引

稀疏索引 == 非聚集索引 == 非聚簇索引   (需要回表->查询主键索引)

联合索引:遵循最左前缀原则 

索引优化顺序

  1. 选择:用索引及查询条件减少检索范围

  2. 投影:只取所需字段

  3. 连接:尽量减少连接表,连接表的连接字段需有索引

Mysql使用B+树的原因:

  1. 红黑树必然可以实现平衡性,数据量越大红黑树的高度(lngN)越高,可用多阶树来优化,从而产生B+树。

  2. B+树,多阶特性,每个节点可以容纳多个关键字,可以通过内存访问的局部性原理优化性能。

Mysql B+特性:

  1. B+树,一个节点 为一页,一页默认16K

  2. 根节点常驻内存

  3. 一个bigint索引字段占用:8字节 + 6或4字节(指针大小,具体情况具体看)

 SHOW GLOBAL  STATUS like 'Innodb_page_size' ;  -- 查看innodb 页大小 (默认页大小 :16K)

说明:磁盘中的一页数据(4kb)和数据库innodb规定的一页数据(16kb),这两个的概念是不一样的。磁盘io的大小也是根据指令来规定的。对应数据库读写来说,会按照数据库的配置,每次最少读写一页数据,也就是16kb。

存储引擎技术点:

  1. 存储引擎为表级别

  2. Innodb ,聚集索引(索引和数据在一个文件),支持事务,支持行锁

  3. MyISAM ,非聚集索引(索引和数据文件分离),不支持事务,不支持行锁

Innodb 磁盘存储对应两个文件:

  1. table_name.frm     表结构相关信息

  2. table_name.ibd      索引 + 数据 文件

推荐使用整型自增主键的原因:

  1. 减少mysql自动生成隐藏主键的负担或选择某唯一列字段的成本。

  2. 数值型 比 字符串比较更快,存储空间也相对小

  3. 自增、或相对自增,在叶节点放不下时,总是新增一个数据节点;而如果是非自增主键插入节点空间不足时,会导致B+树 节点分裂后做平衡性调整,相对插入效率较低!另外在物理空间上连续自增保持顺序性,不连续主键的插入会导致页在磁盘存储的不连续性。(有些个人理解!欢迎指教!)

MyISAM 磁盘存储对应三个文件:

  1. table_name.frm      frame表结构相关的信息

  2. table_name.MYD     数据文件

  3. table_name.MYI      索引文件

B+树大致结构

图片来源:https://blog.csdn.net/LJFPHP/article/details/105318995

【扩展】

pagecache和buffercache的区别:

pagecache实际上是针对文件系统的,是文件的缓存,在文件上的数据会缓存到pagecahce,文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成,当pagecache中的数据需要刷新时,pagecache中的数据交给buffercache。但这种处理在2.6版本内核之后就变得简单了,没有真正意义的cache操作。

buffercache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘操作的数据会缓存到buffercache中,如:文件系统的元数据都会缓存到buffercache中。简单来说,

pagecache用来缓存文件数据,buffercache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,数据会缓存到pagecache。若直接采用dd工具对磁盘进行读写,那么数据会

缓存到buffercache。

cache和buffer的区别:

a buffer is something that has yet to be "written" to disk

a cache is something that has been "read" from the disk and stored for later use

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值