标签:需要 1170 查询 索引 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 所以当数据到达千万时可以考虑分表了,否则树高超过三层,会导致查询效率变差
标签:需要,1170,查询,索引,MySQL,分表,三层,数据,节点 来源: https://www.cnblogs.com/kuanglongblogs/p/15798366.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。