1170*1170*16=21902400
可以存储 2100万 条数据 。
在 InnoDB 存储引擎中,B+Tree 的高度一般为 2-4 层,这就可以满足千万级的数据的存储,查找数据的时候,一次页的查找代表一次 IO,那我们通过主键索引查询的时候,其实最多只需要 2-4 次 IO 操作就可以了 。
2.3 什么样的搜索可以用到索引?根据前面的介绍,我们可以得出结论,在以下类型的搜索中,会用到索引:
- 全值匹配
- 最左匹配
- 前缀匹配
- 范围匹配
- 前面全值匹配,后面范围匹配
- 覆盖索引
2.4 使用限制毫无疑问,基于 B+Tree 的索引,其实也存在一些使用限制 。例如:
- 如果我们将 age 作为搜索条件,虽然 age 也是联合索引的一部分,但是 age 整体上在索引树中是无序的,所以将 age 作为搜索条件是没法使用上述索引的 。
- 基于第一点,如果联合索引中还有第三、第四列等,那么凡是跳过第一列直接使用后面的列作为查询条件,索引都是不会生效的 。
- 范围条件的右边无法使用索引直接定位 。例如搜索 username 以 a 开头并且年龄为 99 的用户:where username like 'a%' and age=99,此时 age=99 这个条件就无法在索引树中直接处理了(可以通过索引下推过滤) 。原因很简单,当我们找到所有 username 以 a 开始的用户之后,这些用户的 age 并不是有序的,所以 age 就没法继续使用索引搜索了(但是可以通过索引下推过滤) 。
- username 为 ad 且 age 为 80;
- username 为 ae 且 age 为 88;
文章插图
可以看到,username 以 a 开始的用户,age 并不是有序的,所以就只能通过索引下推过滤了,而无法直接通过索引扫描定位数据 。
对于第三点,如果范围搜索的字段值的可能性比较少,则可以通过多个等于比较来代替范围搜索 。
2.5 自适应哈希索引Hash 索引在 MySQL 中主要是 Memory 和 NDB 引擎支持,InnoDB 索引本身是 不支持的,但是 InnoDB 索引有一个特性叫做自适应哈希索引,自适应三个字意味着整个过程是全自动的,不需要开发者配置 。
当 InnoDB 监控到某些索引值被频繁的访问时,那么它就会在 B+Tree 索引之上,构建一个 Hash 索引,进而通过 Hash 查找来快速访问数据 。
推荐阅读
- 数据结构与算法:图的存储—邻接表
- 我们一起聊聊MySQL中的游标,你学会了吗?
- MySQL两个表的亲密接触-连接查询的原理
- MySQL利用int类型高性能实现签到活动
- 深度剖析 Redis 九种数据结构实现原理
- Shopify跨境电商独立站SEO搜索引擎优化教程
- mysql中的高级连接查询
- MySQL无法启动的可能原因和解决方法!MySQL启动失败处理技巧!
- Elastic Search 命令详解-索引操作
- 忘记了MySQL数据库密码,怎么办?