mysql innodb 主键,mysql-Innodb的随机主键

If index records are inserted in a sequential order (ascending or descending), the resulting index pages are about 15/16 full. If records are inserted in a random order, the pages are from 1/2 to 15/16 full.

为什么插入会导致大量带有随机PRIMARY KEY列的页面拆分(1/2满)?

非常感谢您的帮助.

解决方法:

MySQL不会在每次插入时“重建”索引.

MySQL的默认页面大小为16K.它以1MB的增量(称为扩展区)分配这些页面.

第一次创建表(重建索引)时,页面将被填满15/16,为一些随机插入(1k的空间)留出了空间.如果您的索引条目每个为500字节(聚集索引的主键大小行数据),则在拆分页面之前会留出空间来插入2个新行.

MySQL将最高和最低记录的值保留在页眉中,因此,一定范围内的记录将位于同一页上.

当MySQL需要在整页上插入一行时,必须拆分该页. MySQL将添加一个新页面,并将页面数据的一半移至新页面.

在页面内,记录实际上可能不是物理顺序的.它们将按照插入的顺序排列.它们通过链接列表的形式顺序链接.因此,即使是随机插入,也不需要拆分页面,也不会导致数据在物理上移动.

多次随机插入后,您的页面将从1/2满到满.具有半个完整页面的索引会对读取性能产生负面影响(您必须读取两个半完整页面才能读取与一个15/16个完整页面相同数量的记录).

现在,如果您要按索引顺序插入行,则MySQL只会继续添加到页面的末尾,将它们填满15/16,并在每次页面添加一个范围.由于不存在页面拆分,因此性能损失要少得多,因此不涉及数据移动,更不用说几乎整页的读取性能优势.

随机插入还会增加页面的碎片,如果您经常读取大量顺序记录(稀有),则可能会影响读取性能.

标签:mysql,database

来源: https://codeday.me/bug/20191121/2054335.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值