mysql内存分配最小单元是多少,为什么命名varchar类型的时候,长度最好是2的N次方

mysql内存分配最小单元是多少,为什么命名varchar类型的时候,长度最好是2的N次方,第1张

(1) 10*1024*1024*1024(2)其实长度最好的是(2^n)-1因为计算机是二进制计算的,1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方 11111111 在计算机中也就是-128到127而varchar类型存储变长字段的字符类型,当存储的字符串长度小于255字节时,其需要1字节的空间,当大于255字节时,需要2字节的空间。使用2 ^ n长度是更好的磁盘或内存块对齐。对齐块更快。今天“块”的大小更大,内存和磁盘足够快,可以忽略对齐,对于非常大的块来说是非常重要的。所以使用(2^n)-1 可以更好的利用磁盘空间和内存,使数据库可以在最大限度内存储更多的数据

B+树在B树的基础上的一中优化,InnoDB和MylSAM存储引擎都是用B+树实现索引结构

B树的索引和关键字key-data存储在磁盘里面,然后被磁盘IO *** 作读入内存,如果这个data很大的话,每次加到内存中的key就会减少, 这会使得B数的高度增加,这样还是会增加磁盘IO查询

为了解决这个问题, B+树将所有数据记录节点按照键值的大小顺序存放在同一层叶子节点上, 而非叶子节点只存储key值信息,这样可以大大增加每个节点存储的key值的数量,降低B+树的高度

非叶子节点只存键值信息,所有叶子节点之间都有一个链指针,数据记录都存在叶子节点上如图:

InnoDB存储引擎最小的存储单元是(页), 每一页的大小是16k(即16384个字节),每一行数据大概就是1k左右,那么一页就可以存16条数据

那么在InnoDb中2层的高度的B+树能存多少条数据,我们来分析一下:

在InnoDB中每个指针为6个字节,一个键值4-8个字节(如:Id为主键 ->bigInt类型是8字节)那么加起来就是14个字节, 那么一页就能存16384 / 14 =1170个指针, 所以2层的B+树能存1170*16=18720条数据

在InnoDB在B+树高度一般为3层所以1170 * 1170 * 16= 21902400 条数据,能存千万级别的数据


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7679371.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-08
下一篇 2023-04-08

发表评论

登录后才能评论

评论列表(0条)

保存