|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1.问题描述:(美团2020春招)
解答:
(1)如果没有索引,数据库引擎需要通过全表扫描来查找数据,将会产生大量的磁盘IO
(2)关系型数据库使用B+树构建索引来加快查询。B+树是一种二叉查找树(每个加点的键值必须保证:比保存在右子树的任何键值都要小,比保存在左子树的任何键值都要大),这样随机查找某个键值时可以通过从根节点执行二叉查找来加速查询,查询成本取决于树的层数。
(3)针对范围查询和排序的优化:在每个叶子节点保存下一个叶子节点的指针,这样当指定范围查询是,先从根节点根据范围的左值找到叶子节点,之后通过向后遍历叶子节点即可找到对应范围的右值,这样可以加速范围查询、排序、分组等数据库查询动作,
(4)针对磁盘读写速度的优化。除了叶子节点之外的其他节点只保存剑指,这样对磁盘的单词读写可以获取到尽可能多的数据。
(5)MYSQL等数据库引擎在实际实现B+树索引的时候,针对磁盘读写做了优化:非叶子节点中只存放KEY值,叶子节点中除了KEY值也会存放数据,按照存放数据的不同索引区分主索引(聚簇索引)和辅助索引。其中主索引的叶子节点汇总存放该key值对应的完整记录,使用主索引进行查询时,可以直接输出记录,一个表只能创建一个主索引。普通索引的叶子节点则存放对应主键值,因此在使用辅助索引进行查找时,需要先找到主键值,然后再到主索引中进行查找,一个表可以创建多个辅助索引。
(6)除了B+树,关系型数据库一般也支持哈希索引,哈希索引能够非常高效地进行随机查找,但是对于范围查询、排序和分组都不支持。
参考视频:https://www.bilibili.com/video/B ... 2510924859431231520
题目来自:牛客网 |
|