面试题:你真的熟悉MySQL数据库以及索引吗?

本文通过一个面试场景引入,探讨了数据库索引的重要性,特别是在处理大量数据时。文章详细介绍了不同类型的索引数据结构,如Hash、B树和B+树的特性,以及它们在范围查询和等值查询中的表现。特别强调了B+树在MySQL中的应用,因为它能够有效提高磁盘I/O效率和范围查询速度。文章还提及了索引的最左匹配原则,并建议创建区分度高、避免参与计算的索引,以优化查询性能。
摘要由CSDN通过智能技术生成

以下这个面试场景,不知道大家熟悉不熟悉:

  • 面试官:数据库有几千万的数据,查询又很慢我们怎么办?

  • 面试者:加索引。

  • 面试官:那索引有哪些数据类型?索引是怎么样的一种结构?哪些字段又适合索引呢?B+的优点?聚合索引和非聚合索引的区别?为什么说索引会降低插入、删除、修改等维护任务的速度?………

  • 面试者:面试官怎么出我们公司门来着?。

是的大家可能都知道慢了加索引,那为啥加,在什么字段上加,以及索引的数据结构特点,优点啥的都比较模糊或者甚至不知道。

正文开始

我看你简历上写到了熟悉MySQL数据库以及索引的相关知识,我们就从索引开始,索引有哪些数据结构?

Hash、B+

大家去设计索引的时候,会发现索引类型是可以选择的。
在这里插入图片描述

  • 为什么哈希表、完全平衡二叉树、B树、B+树都可以优化查询,为何Mysql独独喜欢B+树?

我先聊一下Hash:

大家可以先看一下下面的动图
在这里插入图片描述

注意字段值所对应的数组下标是哈希算法随机算出来的,所以可能出现哈希冲突

那么对于这样一个索引结构,现在来执行下面的sql语句:

select * from sanguo where name=‘鸡蛋’

可以直接对‘鸡蛋’按哈希算法算出来一个数组下标,然后可以直接从数据中取出数据并拿到所对应那一行数据的地址,进而查询那一行数据, 那么如果现在执行下面的sql语句:

select * from sanguo where name>‘鸡蛋’

则无能为力,因为哈希表的特点就是可以快速的精确查询,但是不支持范围查询

如果做成了索引,那速度也是很慢的,要全部扫描。

  • 问个题外话,那Hash表在哪些场景比较适合?<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值