索引的背景是什么/索引解决了什么问题?
在进行数据库查找时避免进行遍历,优化查询速度(降低插入和删除速度)。
索引的工作原理
索引的底层数据结构是由B+树实现的,例如:
B+树是B树的更进一步,B树中非叶子结点可能会存储数据,B+树的非叶子结点只是用来辅助查找。
B+树的每一层兄弟节点之间都是相互连通的(类似于链表),遍历起来更方便,尤其是指定区间进行查找的时候。
B+树的相关特点:
- B+树与哈希表相比它可以实现数据库中的模糊查询情况
- B+树与二叉搜索树相比它的高度更低,查找效率更高
- B+树与B树相比查找效率更高速度更快
标题通过主键索引查询的效率要比通过其他列的索引查询效率更高
原因:主键索引中最终叶子结点上存的数据就是一条一条的记录,当一个表已经包含主键时,数据库天然就是通过B+树来组织所有记录的。而其他列上的索引叶子节点上存的实际上是对应记录的主键id。这就意味着通过其他列查找记录,需要查找两次,先在其他列的索引中找到对应记录的id,然后拿着id再去主键索引中查找(回表)。