zoukankan      html  css  js  c++  java
  • MySQL什么时候需要进行分表

    博客书写不易,转载请注明出处!

    前提:mysql使用InnoDB事务型引擎,由于使用InnoDB那么默认的索引树则为B+数

    先给结论:当数据到达千万时可以考虑分表了

    ===============================感兴趣可以看以下计算方式===============================

    B+数知识点:

    • B+树非叶子节点只存储索引
    • B+树每层的索引有重复
    • B+树叶子节点(也就是最后一个节点)才有数据
    • B+树叶子节点指针是双向的

    共识:树的层级越高,查询速度越慢,索引占据内存越大

    为了保障数据的高效查询,减少B+数的查询层数,这里规定B+数只有三层为高效

    前置条件:

    • 这里约束B+数只有三层为高效查询,大于三层不做考虑

    Q:那么三层的B+数能存放多少数据,表数据达到多少后需要进行优化?

    基础知识点:

    • innoDB最小单位为页,一页为16K
    • 主键一般为bigint 8字节,指针大小在InnoDB是6字节
    • B+数最后一层包含数据

    B+数模型如下:

     由上面基础信息和图可以得出三层数据量

    • 每页能存放(主键+指针)的数量:16*1024/(8+6)=1170
    • 第一层:能存放 1170 个
    • 第二层:能存放 1170 * 1170 个
    • 第三层:由于限制只有三层,B+数最后一层包含数据,设每条数据为1KB,那么第三层的数据数量为:1170*1170*16/1=21902400 所以当数据到达千万时可以考虑分表了,否则树高超过三层,会导致查询效率变差
  • 相关阅读:
    刚装的vs无法运行正确的程序
    选择正确的C/C++ runtime library
    【转】how can i build fast
    【转】关于增量链接(incremental linking)
    VS升级后的配置问题
    获得system32等系统文件权限
    Java Web总结二十三发送邮件
    Java Web总结二十二投票系统
    Java Web总结二十一Listener监听器
    Java Web总结二十Filter、装饰设计模式
  • 原文地址:https://www.cnblogs.com/kuanglongblogs/p/15798366.html
Copyright © 2011-2022 走看看