接触sql小半年了,网上大神说索引非常重要!!!!
但是一直很蒙,相信很多朋友也是这样,这里特来和大家分享一下我是如何明白的。
明白的前提:
1.了解基本数据结构内容:树形结构、二分查找、时间复杂度
2.了解磁盘和内容之间的数据读取IO
索引是什么:
索引是帮助mysql高效提取数据的一种数据结构
网上大神进行的总结,当你理解索引后,你会感觉这个说法感觉超级棒!!
- 索引的基础就是排序,这一点很重要。
- 然后结合二分查找,时间就会大幅度降低,远低于线性查找。这就是采用树型数据结构的前提之一。
- 索引是存在磁盘中的,不存储在内存中。
- 如何实现高效提取数据内,就是降低内存和磁盘之间的IO,因为读取数据大部分时间都是浪费在了内存和磁盘之间的IO上。
- 每次从磁盘中取出的数据越多,那么查找到指定数据的时间就相对越短。
- 索引B+树的每个结点仅仅存储key和指针,在相同存储空间中,B+树就能存储更多的指针。
- B+树的数据都是存储在叶子结点的,所以每次找数据都必须要找到叶子结点,因此查找的时间复杂度也非常稳定。
- 而且B+树叶子结点也进行了排序链接,形成了一个有序的链表,这样就是非常时候范围查找,从任何一个数据位置都可以遍历所有数据,方便扫表。
- 注意,树的层数或高度极大影响查找的速度,这也是B+树性能高的原因之一。
- B树的数据存在在各个结点,所以相同空间存储的内容不够多,以至于树的高度会增高,从而导致IO增多,以致效率降低。
- CSDN中有很多大神都进行了图文解释,以上是我进行的总结。
- 了解二分查找、b树、B+树就可以。红黑树啥的可以最后仔细学习,非专业感觉不用很懂。
- https://blog.csdn.net/u013235478/article/details/50625677?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase
- https://blog.csdn.net/alex_xfboy/article/details/82818753?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-5.nonecase