文章目录
- ☃️分类
- ☃️演示图
- ☃️思考
- ☃️总结
欢迎来到 请回答1024 的博客 |
🍓🍓🍓欢迎来到 请回答1024的博客
关于博主: 我是 请回答1024,一个追求数学与计算的边界、时间与空间的平衡,0与1的延伸的后端开发者。
博客特色: 在我的博客中,开设了如下专栏(点击可以进入专栏奥~): Java、MySQL、Redis、Spring、SpringBoot、SpringCloud、RabbitMQ、微服务、分布式 等相关技术专栏。期待与您一起,探索编程世界中的发现和创新之旅。
🍎🍎🍎我的主页 : https://reply1024.blog.csdn.net
敬请期待定期更新、见解和教程!让我们一起踏上这段编码冒险之旅!
数学与计算的边界 时间与空间的平衡 0与1的延伸 |
☃️分类
分类 | 含义 | 含义 特点 | 关键字 |
---|---|---|---|
主键索引 | 针对于表中主键创建的索引 | 默认自动创建,只能有一个 | PRIMARY |
唯一索引 | 避免同一个表中某数据列中的值重复 | 可以有多个 | UNIQUE |
常规索引 | 快速定位特定数据 | 可以有多个 | |
全文索引 | 全文索引查找的是文本中的关键词,而不是比较索引中的值 | 可以有多个 | FULLTEXT |
在 InnoDB 存储引擎中,根据索引的存储形式,又可以分为以下两种:
☃️演示图
聚集索引选取规则:
● 如果存在主键,主键索引就是聚集索引
● 如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引
● 如果表没有主键或没有合适的唯一索引,则 InnoDB 会自动生成一个 rowid 作为隐藏的聚集索引
☃️思考
-
以下 SQL 语句,哪个执行效率高?为什么?
select * from user where id = 10; select * from user where name = 'Arm'; -- 备注:id为主键,name字段创建的有索引
答:第一条语句,因为第二条需要回表查询,相当于两个步骤。
-
InnoDB 主键索引的 B+Tree 高度为多少?
答:假设一行数据大小为1k,一页中可以存储16行这样的数据。InnoDB 的指针占用6个字节的空间,主键假设为bigint,占用字节数为8.
可得公式:n * 8 + (n + 1) * 6 = 16 * 1024,其中 8 表示 bigint 占用的字节数,n 表示当前节点存储的key的数量,(n + 1) 表示指针数量(比key多一个)。算出n约为1170。
如果树的高度为2,那么他能存储的数据量大概为:1171 * 16 = 18736;
如果树的高度为3,那么他能存储的数据量大概为:1171 * 1171 * 16 = 21939856。
另外,如果有成千上万的数据,那么就要考虑分表,涉及运维篇知识。
☃️总结
MySQL的索引可以分为以下几类:
B-Tree 索引:B-Tree(Balanced Tree,平衡树)是一种常见的索引结构,适用于等值查询和范围查询。MySQL的普通索引和唯一索引都是基于B-Tree实现的,其中唯一索引要求索引列的值唯一。
哈希索引:哈希索引是通过哈希算法将索引列的值映射到哈希表中的一个位置,适用于等值查询。但是,哈希索引不支持范围查询或者排序操作,并且在某些情况下可能会导致哈希冲突。
全文索引:全文索引用于对文本数据进行全文搜索,允许在文本列上进行关键字搜索。MySQL的全文索引是针对FULLTEXT类型的列,提供了全文搜索的功能。
空间索引:空间索引用于对空间数据进行查询,如地理位置数据。MySQL支持使用R-Tree索引实现空间数据的快速查询。
组合索引:组合索引是将多个列组合在一起创建的索引,可以提高多列条件查询的效率。在MySQL中,使用组合索引可以将多个查询条件一起考虑,提高查询效率。
这些索引类型各自适用于不同的场景和查询需求,选择合适的索引类型可以提高数据库的查询性能和效率。