【索引】Mysql索引常见问题
1、什么是索引:
- 索引是一种数据结构,用来提高在数据表中的数据查询效率,同时也是随机读和有效排序的基础。
2、为什么使用索引:
- 根本原因在于磁盘速度与内存速度差距甚大,所以我们希望能使用尽可能少的磁盘 IO 次数去拿到想要的数据,因此引入了索引,索引通过哈希表或 B+ 树的方式存储了索引值和数据块的对应关系,使得能够在较低的时间复杂度内拿到数据。
3、InnoDB 中为什么选择 B+ 树组织索引:
- 实现索引的数据结构必须能在较低的时间复杂度内找到索引键对应的数据,除了哈希表外,可以选择排序树,同时为了减少磁盘 IO 次数,要求这棵树要尽可能低,要实现自平衡,不能在极端情况下退化为链表,再者,由于操作系统以页为单位进行磁盘 IO,这就意味这不能为了降低树高度无限增加一个树节点的子节点,所以为了保证一个中间节点持有更多子节点而选择 B+ 树而不是 B 树,另外,B+ 树所有数据存储在叶子节点,这样每次查询的时间复杂度都是一致的,可以获得更高的稳定性。
4、聚簇索引和非聚簇索引的区别:
- 聚簇索引在一张表中只能有一个,一般是主键索引,聚簇索引的叶子节点存储的是真实地数据。
- 非聚簇索引可以建立多个,其叶子节点存储地并不是真实地数据,而是主键值,根据非聚簇索引只能拿到该行记录地主键值,要拿到真实地数据还需要根据聚簇索引去查询
5、在什么情况下使用索引:
- 读操作比例大大高于写操作比例时。
- 数据区分度高。
- 主键和外键建议使用。
- 经常出现在 WHERE 子句中的列。
6、如何高效地使用索引:
- 建立索引时尽量使用组合索引。
- 不要对大量数据建立索引。
- 建立组合索引时认真考虑先后顺序。
- 使用索引时严格遵循最左前缀原则,避免索引失效。
- 尽量使用索引覆盖,避免 SELECT *
7、更多内容:https://blog.csdn.net/h1012946585/article/details/109175548
博客参考:
Mysql索引,为什么用B+树?索引怎么加快查询的?应该如何使用索引?:https://blog.csdn.net/h1012946585/article/details/109175548