索引的本质:
索引是为了提高数据库的查询效率和操作性能,它的本质是数据结构。
索引的数据结构:
索引的数据结构包括二叉树、平衡二叉树、Hash表、B树、B+树等等。其中MySQL的索引选择的是B+树。为什么选择B+树,主要原因是B+树的有序性、平衡性、存储优化、I/O非常友好,索引是排好序的;非叶子节点不存储数据,只存储索引,可以存放更多的索引,叶子节点包含了所有的索引字段,各个叶子节点用指针进行了连接,提高了区间访问的性能
索引的作用:
1、提高查询速度
使用索引可以减少全表扫描,快速定位到符合条件的数据
select * from test where id=1000
上面的查询语句,通过索引快速定位到id记录是1000的数据
2、多表关联的查询优化
未创建索引,多表关联的数据匹配需要大量的磁盘IO,会使查询速度非常慢,通过索引可以加速表之间的关联
3、聚合操作的优化
聚合操作count、min、max、group_concat等,在有索引的情况下可以直接从索引中读取结果
4、优化排序
由于索引本身存储的数据是有序的,对于order by ,group by 的操作可以提高速度
总结:
MySQL索引的本质是基于数据结构的优化机制,通过减少查询范围,磁盘IO、降低扫描代价,加速数据库操作。尽管索引能显著提升查询性能,不合理的索引设计可能导致性能下降