首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
牛客267468588号
吕梁学院 后端
发布于山西
关注
已关注
取消关注
@程序员Hasity:
【备战春招】总结几十场秋招面经,MySQL高频题TOP11
1. 为什么MySQL数据库使用B+树不使用B树?MySQL数据库使用B+树而不是B树的主要原因有以下几点:磁盘IO优化:B+树在内部节点只存储索引键,而不存储数据记录,数据记录只存在于叶子节点。这样可以使得每个节点能够存储更多的索引键,减少树的高度,从而减少磁盘IO次数,提高查询效率。范围查询效率高:由于B+树的所有叶子节点都通过指针连接在一起,形成一个有序链表,因此范围查询非常高效。而B树则需要在叶子节点和内部节点之间进行跳跃,效率相对较低。更好的顺序访问性能:B+树的叶子节点形成有序链表,可以方便地进行顺序访问,适合于范围查询、排序等操作。而B树的叶子节点并没有连接在一起,需要通过中序遍历等方式才能实现有序访问。更适合大规模数据存储:B+树的内部节点只存储索引键,相比于B树,可以存储更多的索引键,减少树的高度,适合于大规模数据存储。MySQL选择使用B+树作为索引结构,主要是为了优化磁盘IO、提高范围查询效率、提升顺序访问性能和适应大规模数据存储的需求。2. 唯一和主键索引的区别,唯一与主与聚簇、非聚簇的关系?唯一索引和主键索引的区别在于约束性和可空性:唯一索引:唯一索引是用来保证某一列或多列的取值在整个表中是唯一的。它可以包含空值,但是对于非空值,每个索引键值只能在表中出现一次。一个表可以有多个唯一索引。主键索引:主键索引是一种特殊的唯一索引,用来唯一标识表中的每一行数据。主键索引要求索引键值不能为空,且在整个表中必须唯一。一个表只能有一个主键索引。唯一索引和主键索引都可以用来提高查询效率,避免数据重复。它们的区别在于主键索引是对表中的数据行进行唯一标识,而唯一索引只是保证索引键值的唯一性。关于聚簇索引和非聚簇索引,它们与唯一索引和主键索引的关系如下:聚簇索引:聚簇索引是一种特殊的索引结构,它决定了数据在磁盘上的物理存储顺序。在聚簇索引中,数据行按照索引键的顺序进行存储。一个表只能有一个聚簇索引,通常是主键索引。非聚簇索引:非聚簇索引是指除了聚簇索引以外的其他索引。在非聚簇索引中,索引键和数据行的存储顺序是分离的,索引键指向对应的数据行。一个表可以有多个非聚簇索引,包括唯一索引和非唯一索引。唯一索引和主键索引是用来保证数据的唯一性,主键索引是一种特殊的唯一索引。聚簇索引和非聚簇索引是索引的物理存储方式,聚簇索引通常是主键索引,而非聚簇索引可以是唯一索引或非唯一索引。3. 事务的特性有哪些?分别是怎么保证的?MySQL的默认隔离级别是什么?事务具有以下四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。原子性(Atomicity):事务是一个不可分割的工作单位,要么全部执行成功,要么全部回滚到初始状态。原子性通过日志和回滚操作来保证,如果事务执行失败,系统可以回滚到事务开始前的状态。一致性(Consistency):事务执行前后,数据库的完整性约束没有被破坏。一致性通过在事务提交前进行数据校验和约束检查来保证。隔离性(Isolation):多个事务并发执行时,每个事务都应该感觉不到其他事务的存在,每个事务都认为自己是唯一在执行的。隔离性通过锁机制和并发控制来保证,防止事务之间的相互干扰和数据不一致。持久性(Durability):一旦事务提交成功,其所做的修改将永久保存在数据库中,即使系统发生故障也不会丢失。持久性通过将事务的操作记录在日志中,并定期将日志写入磁盘来保证。MySQL的默认隔离级别是可重复读(REPEATABLE READ)。在可重复读隔离级别下,事务会对查询的数据加锁,保证在事务执行期间,其他事务无法修改被查询的数据。这样可以避免脏读、不可重复读和幻读的问题。但是在可重复读隔离级别下,会导致并发性能较差,因为锁的粒度较大,会造成锁竞争的情况。可以根据实际需求选择合适的隔离级别,如读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)或串行化(SERIALIZABLE)。4. 请简述常用的索引有哪些种类?B树索引:B树索引是一种平衡树结构,适用于范围查询和精确查找。它将数据按照索引键值的顺序存储在树中,可以快速定位到目标数据。B+树索引:B+树索引是在B树索引的基础上进行了优化,将数据记录只存储在叶子节点,内部节点只存储索引键值。B+树索引适用于范围查询、排序和顺序访问等操作,常用于数据库系统中。哈希索引:哈希索引使用哈希函数将索引键值映射到一个哈希桶中,可以快速定位到目标数据。哈希索引适用于等值查询,但不适用于范围查询和排序操作。全文索引:全文索引用于对文本内容进行搜索,可以实现关键词的模糊匹配和语义搜索。全文索引常用于搜索引擎和文本处理系统中。空间索引:空间索引用于对具有空间属性的数据进行查询,如地理位置信息、地图数据等。空间索引可以支持空间范围查询和空间关系查询。唯一索引:唯一索引用于保证某一列或多列的取值在整个表中是唯一的。它可以用于快速查找和避免数据重复。主键索引:主键索引是一种特殊的唯一索引,用于唯一标识表中的每一行数据。主键索引要求索引键值不能为空,且在整个表中必须唯一。这些索引种类各有特点,根据实际需求和数据特点选择合适的索引类型可以提高查询效率和数据的一致性。5. 联合索引是什么?为什么需要注意联合索引中的顺序?联合索引(Composite Index)是指在多个列上创建的索引,也称为复合索引或多列索引。它可以在一个索引中包含多个列的值,用于加快多列条件查询的速度。需要注意联合索引中的顺序的原因如下:查询条件的顺序:联合索引的顺序决定了查询条件的顺序。当查询中的条件与联合索引的列顺序一致时,可以最大程度地利用索引进行查询优化。如果查询条件与索引列的顺序不一致,可能无法充分利用索引,导致性能下降。查询覆盖:联合索引可以覆盖多个查询条件,只需要扫描索引而不需要回表查询数据。但是,只有当查询条件按照索引列的顺序出现时,才能实现完全的查询覆盖。如果查询条件的顺序与索引列的顺序不一致,可能需要进行额外的回表查询,影响性能。索引大小:联合索引的大小取决于索引列的数量和数据类型。通常情况下,索引的大小越小,查询的速度越快。因此,将最常用的列放在联合索引的前面可以减小索引的大小,提高查询性能。联合索引中的顺序非常重要。正确选择联合索引的列顺序可以最大程度地提高查询性能,减少回表查询和索引大小,从而提高数据库的整体性能。6. 在建立索引的时候,都有哪些需要考虑的因素呢?在建立索引时,需要考虑以下几个因素:查询频率:需要考虑哪些列经常被用于查询条件,以及查询的频率。对于经常被使用的列,建立索引可以提高查询性能。数据的唯一性:如果某一列的取值在整个表中是唯一的,可以考虑将其作为主键索引或唯一索引。数据的分布:需要考虑数据在列中的分布情况。如果某一列的取值分布不均匀,建立索引可能不会带来明显的性能提升。索引的大小:索引会占用存储空间,需要考虑索引的大小对数据库性能的影响。过大的索引可能会导致磁盘IO增加,过小的索引可能无法满足查询需求。更新频率:需要考虑表中数据的更新频率。频繁更新的列可能会导致索引的维护成本增加,影响性能。查询的覆盖度:需要考虑索引是否能够覆盖查询所需的列。如果索引能够满足查询的需求,可以减少回表查询,提高性能。系统资源:建立索引会占用系统资源,包括内存和CPU。需要考虑系统的资源限制,避免过多的索引导致资源不足。综合性能:需要综合考虑以上因素,选择合适的索引策略。有时候需要进行性能测试和优化,根据实际情况进行调整。选择合适的索引策略可以提高数据库的查询性能和整体性能。不同的应用场景和数据特点可能需要不同的索引策略,需要根据实际情况进行权衡和选择。7. 主键使用自增ID还是UUID?选择主键使用自增ID还是UUID,取决于具体的应用场景和需求。下面是对两种主键选择的一些考虑:自增ID:优点:简单易用:自增ID是数据库内置的机制,使用方便。效率高:自增ID是按照顺序递增的,可以减少索引的碎片化,提高查询性能。索引效率高:自增ID可以作为聚集索引,支持范围查询和排序操作。缺点:可预测性:自增ID的生成规则是递增的,可能会暴露数据的增长趋势,存在一定的安全风险。分布式环境下的冲突:在分布式环境中,多个节点生成自增ID可能会出现冲突,需要额外的处理机制。UUID:优点:唯一性:UUID是全局唯一标识符,几乎可以保证每个生成的ID都是唯一的。安全性:UUID不容易被猜测,可以提高数据的安全性。分布式环境下的适用性:UUID可以在分布式环境中生成,不会出现冲突。缺点:占用空间大:UUID是128位的,相比自增ID占用更多的存储空间。索引效率低:UUID的无序性导致索引的碎片化,可能影响查询性能。不适合作为聚集索引:UUID的无序性不适合作为聚集索引,不支持范围查询和排序操作。如果需要简单易用、高效率的主键,可以选择自增ID。如果需要全局唯一性、安全性和适用于分布式环境,可以选择UUID。在实际应用中,也可以根据具体需求和权衡选择其他的主键生成策略。8. 说一说innodb 的 MVCC机制?InnoDB是MySQL中一种常用的存储引擎,它使用了MVCC(Multi-Version Concurrency Control)机制来实现并发控制和事务隔离。InnoDB的MVCC机制主要包括以下几个关键点:版本号:每个数据行都会有一个版本号,用于标识该数据行的创建时间或修改时间。Read View:每个事务在开始时会创建一个Read View,用于确定事务开始时的数据库快照。Read View包含了事务开始时已提交的所有数据行的版本号。快照读:在执行SELECT语句时,InnoDB会根据事务的Read View来确定可见的数据行。只有那些版本号早于或等于事务的Read View的数据行才会被读取,保证了读取的一致性。Undo日志:当一个事务更新或删除数据时,InnoDB会将旧版本的数据行保存在Undo日志中。这样,其他事务在读取该数据行时可以通过Undo日志来获取旧版本的数据。并发控制:InnoDB使用多版本并发控制来处理并发事务。不同事务之间的读写操作可以并发进行,互不干扰。读操作不会阻塞其他读操作,读操作也不会被写操作阻塞。只有读写操作之间存在冲突时,才会进行锁定。通过MVCC机制,InnoDB实现了较好的并发性能和事务隔离性。读操作可以并发进行,不会被锁定,提高了并发性能。同时,通过版本号和Read View的控制,保证了读取的一致性和事务的隔离性。需要注意的是,MVCC机制也会带来一些额外的开销,如存储空间的增加和Undo日志的维护。因此,在使用InnoDB时,需要根据具体的应用场景和需求进行权衡和选择。9. 请解释一下数据库的锁机制。数据库的锁机制是用于控制并发访问数据库的一种机制,它可以确保多个事务之间的数据操作不会相互干扰或产生冲突。常见的数据库锁包括共享锁(Shared Lock)和排他锁(Exclusive Lock)。共享锁(Shared Lock):共享锁也称为读锁,它允许多个事务同时读取同一数据,但不允许其他事务对该数据进行修改。共享锁之间是兼容的,即多个事务可以同时持有共享锁,不会相互阻塞。共享锁的目的是保证读操作的一致性,多个事务可以同时读取数据,不会读到其他事务正在修改的数据。排他锁(Exclusive Lock):排他锁也称为写锁,它在事务对数据进行修改时使用,确保其他事务无法同时读取或修改该数据。排他锁之间是互斥的,即一个事务持有排他锁时,其他事务无法同时持有共享锁或排他锁。排他锁的目的是保证写操作的原子性和一致性,确保在修改数据时不会被其他事务读取或修改。数据库锁机制的使用需要根据具体的业务需求和事务操作进行合理的选择和管理。过多的锁可能会导致性能下降和死锁的发生,因此需要在保证数据一致性的前提下,尽量减少锁的使用和持有时间。除了共享锁和排他锁,还有其他类型的锁,如意向锁、行级锁、表级锁等,不同的数据库管理系统可能会有不同的锁机制和实现方式。在实际应用中,需要根据具体的场景和需求选择合适的锁机制来保证数据的一致性和并发性能。10. 说一说mysql的join是的注意事项在使用MySQL的JOIN操作时,有一些注意事项需要考虑,以确保查询的效率和正确性:选择合适的JOIN类型:MySQL支持多种JOIN类型,如INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN等。根据业务需求和数据关系,选择合适的JOIN类型,以获取正确的结果集。确保JOIN字段上有索引:JOIN操作通常涉及连接两个或多个表的字段,为了提高查询性能,需要在JOIN字段上创建索引。索引可以加快JOIN操作的速度,减少数据的扫描。注意JOIN的顺序:在多表JOIN时,JOIN的顺序可能会影响查询性能。通常,将结果集较小的表放在前面,以减少中间结果集的大小,提高查询效率。避免跨表过多的JOIN操作:过多的JOIN操作可能会导致查询性能下降,因为每个JOIN操作都需要进行数据的匹配和连接。如果可能,尽量优化数据模型,减少JOIN操作的数量。注意NULL值的处理:在JOIN操作中,NULL值可能会导致结果集的不确定性。需要注意NULL值的处理,确保JOIN操作的正确性和预期结果。使用JOIN条件的过滤:在JOIN操作中,可以使用JOIN条件进行过滤,以减少中间结果集的大小。通过合理的条件过滤,可以提高查询性能。注意JOIN操作的性能影响:JOIN操作可能会增加查询的复杂性和开销。在设计数据库结构时,需要权衡查询的需求和性能,避免过度使用JOIN操作。定期优化和检查查询计划:使用EXPLAIN语句来检查查询计划,了解JOIN操作的执行情况和性能瓶颈。根据需要,进行索引优化、查询重写等操作,以提高查询性能。综上所述,使用MySQL的JOIN操作时,需要注意选择合适的JOIN类型、创建索引、优化JOIN顺序、避免过多的JOIN操作等,以提高查询性能和确保结果的正确性。
点赞 5
评论 1
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
07-31 15:53
已编辑
五邑大学 Java
双非二本找不到实习准备秋招,简历求指教
如题,双非二本找了一个半月实习没几个要简历的想直接准备秋招了,但是感觉简历好简单但又不知道怎么改有点想改成两页但是第二页我担心太空了不好看求指教,听劝
无实习如何秋招上岸
点赞
评论
收藏
分享
07-30 11:59
门头沟学院 Java
小鹏二面求助
昨天中午面完今天hr发信息约二面了有没有佬知道二面会深挖项目经历吗
小鹏汽车二面18人在聊
点赞
评论
收藏
分享
07-02 19:53
广州软件学院 Java
究竟是谁在oc啊,好想死啊
26届,学院本(数据科学与大数据技术)现在依旧0实习,被动死了有无佬愿意拷打一下简历或者内推一下跪求跪谢
实习,投递多份简历没人回...
点赞
评论
收藏
分享
07-10 14:08
已编辑
江西农业大学 Java
笔试做项目
咋感觉是白嫖呢
拒绝无效加班的小学生...:
期望3k吗?java这辈子有了
点赞
评论
收藏
分享
昨天 14:15
门头沟学院 Java
速腾聚创简历挂
天呐,这究竟是什么bg才能过初筛呀,本2硕9都不行吗
投递速腾聚创等公司10个岗位
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
百度提前批,三面被推迟一周,喜提秋招第一凉
4464
2
...
虾皮秋招一面
4002
3
...
7.30滴滴提前批一面凉经
3160
4
...
干活最少的实习生因为长得漂亮转正了
3151
5
...
百度提前批 三面
2915
6
...
QQ提前批一面凉经
2801
7
...
他拿大厂SSP Offer打牌是什么概念啊?25届双非之光
2613
8
...
7.30百度提前批一面
2340
9
...
上班一周,工资还没拿,先欠公司两千
1966
10
...
为什么我不建议你去字节?
1863
创作者周榜
更多
正在热议
更多
#
简历上的经历如何包装
#
25541次浏览
744人参与
#
你最近一次加班是什么时候?
#
70897次浏览
350人参与
#
中兴秋招
#
204289次浏览
2284人参与
#
工作中哪个瞬间让你想离职
#
61334次浏览
551人参与
#
26届的你,投了哪些公司?
#
38929次浏览
441人参与
#
和同事相处最忌讳的是__
#
21810次浏览
223人参与
#
你遇到最难的面试题目是_
#
15761次浏览
195人参与
#
我对___祛魅了
#
44482次浏览
414人参与
#
如果校招重来我最想改变的是
#
271586次浏览
2849人参与
#
地平线求职进展汇总
#
52542次浏览
369人参与
#
你跟室友的关系怎么样?
#
6326次浏览
97人参与
#
如果可以选,你最想从事什么工作
#
565541次浏览
4699人参与
#
秋招被确诊为……
#
162099次浏览
725人参与
#
你最讨厌面试问你什么?
#
26356次浏览
292人参与
#
什么样的背景能拿SSP?
#
33012次浏览
207人参与
#
如何快速融入团队?
#
15302次浏览
188人参与
#
秋招前后对offer的期望对比
#
302890次浏览
2229人参与
#
打工人的精神状态
#
70833次浏览
1143人参与
#
机械人的金三校招总结
#
36295次浏览
461人参与
#
如何看待offer收割机的行为
#
815954次浏览
6088人参与
#
字节跳动工作体验
#
462273次浏览
4649人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务