将索引的数据类型是设置为整型 , 一来占有的磁盘空间或内存空间更少 , 另一方面整型相对于字符串比较更快速 , 而字符串需要先转换为ASCII码然后再一个个进行比较的 。
参见B+树的图它本质上是多路多叉树 , 如果主键索引不是自增的 , 那么后续插入的索引就会引起B+树的其他节点的分裂和重新平衡 , 影响数据插入的效率 , 如果是自增主键 , 只用在尾节点做增加就可以 。
最后特别强调一点:不管当前是否有性能要求或者数据量多大 , 千万不要使用UUID作为索引 。
2.4 为什么Mysql存储引擎中默认每个页的大小为16KB?假设我们一行数据大小为1K , 那么一页就能存16条数据 , 包含指针+数据+索引 。假设一行数据大小为1K , 那么一页(1个叶子节点)就能存16条数据;对于非叶子节点 , 假设ID为bigint类型那么长度为8B , 指针大小在Innodb源码中为6B , 一共就是14B , 那么一页里就可以存储16K/14=1170个(主键+指针) , 这样一颗高度为3的B+树能存储的数据为:1170117016=2千万级别 。所以我们前面1000万的数据只有0.02s 。
2.5 HASH算法的使用场景
文章插图
Hash算法是一种散列算法 , 就是计算出某个字段的hash , 然后存放在对应的地址中 , 查找数据时只需要1次定位而不像BTree那样从根节点找到叶子节点经过多次IO操作 , 所以查询效率非常地高 。但同样也有很多的弊端 , 讲一下最重要的两条 。1、很明显hash只支持=、IN等查询 , 而不支持范围查询2、 Hash 索引在任何时候都不能避免表扫描 。
所以使用时务必注意 。
【从千万级数据查询,来聊一聊索引结构和数据库原理】
推荐阅读
- 二年级赞美祖国的简短句子 二年级爱祖国的句子
- MySQL 聚集索引和二级索引
- 石头|从玩具到工具!扫地机器人凭什么能够成功打入千家万户
- PC软件|权威硬件工具AIDA64升级6.70正式版:迎接13代酷睿、一大波新卡
- 中级茶艺师泡沫红茶和柠檬红茶的考试步骤和茶艺解说词。急求,有知道或者考过的朋友帮下忙?[红茶]
- 紧张时千万别做的10个动作
- 胃疼时按揉一个穴位,超级止痛!
- 霍山黄芽如何辨别,如何区分霍山黄芽的等级
- 从贡茶沦为小众茶,贡茶得官
- 开发安全、高质量代码的 5 款顶级 Python 工具