MySQL锁机制详解及面试必考点

创始人
2024-12-24 08:38:05
0 次浏览
0 评论

【面试题】细说mysql中的各种锁

面试中经常被问到的MySQL密钥有很多种类型,了解它们对于IT从业人员来说非常重要。
本文将带您深入探讨MySQL中的锁机制,并结合真实案例帮助您轻松掌握。
锁在保护数据库中的数据安全方面发挥着作用,可以分为两类:闩锁(就像不需要钥匙的老式乡村别墅锁)和事务锁(就像需要锁的现代锁)。
在MySQL中,锁(如InnoDB的mutex、rwlock)主要用于保护连接资源,而事务锁(如行锁、表锁、页锁)则侧重于数据操作的并发控制,例如行级。
锁允许读和写,锁表锁定整个表。
全局锁锁定整个数据库实例,影响较大,主要用于数据库全量备份。
相比之下,表锁和行锁具有更精细的细节,包括共享读锁和独占写锁,前者允许多个事务读取,而后者保证事务独占性。
行键根据操作类型分为共享键和独占键,Insert、update、delete会自动添加独占键。
不同事务隔离级别下锁的提升和降级是不同的,例如在REPEATABLEREAD下,InnoDB使用下一键锁来防止鬼读。
理解这些概念将帮助您在面试和工作中更好地处理与数据库相关的问题。

面试题:mysql一棵B+树能存多少条数据?

要了解MySQLInnoDB存储引擎中一棵B+树可以存储多少条数据,首先需要了解存储引擎的数据结构和组织方式。
InnoDB存储引擎的最小体积是“页”,页大小为16KB。
在本地MySQL部署中,通过命令行连接数据库并输入密码来查看InnoDB页面大小。
MySQL中的Table表记录是以页为单位存储的,按照16K/1K估算,一页大约可以存储16条数据。
MySQL中最小的卷称为“页”,但是数据组织是如何组织的,数据存储位置又是如何确定的呢?介绍B+树,一种高效的数据检索结构。
页面除了存储数据(叶子节点)外,还存储键值和索引(非叶子节点),形成按索引组织的表。
例如,pagenumber=3的页存储了数据页的键值和指针,而这个页由若干个键值+指针组成。
B+树根据键值快速检索记录。
B+树的高度是从页面级别开始计的。
InnoDB表空间文件中,主键索引根页的页号为3,其他二级索引的页号为4,通过计算偏移量,得出B+主键索引根页的位置获得文件中的树。
使用hexdump工具查看该位置的数据,读取页级值,计算B+树的高度。
假设B+树的深度为2,则存储的记录总数为根节点指针的数量乘以单叶节点记录的数量。
主键标识符为large类型,长度为8字节,指针大小为6字节。
计算页面中可以存储多少个这些元组,这表示存在的游标数量。
据此计算,一棵高度为2的B+树大约可以存储18720条数据记录。
高度为3的B+树可以存储的行数为1170*1170*16=21902400。
存储千万级数据只需要3层左右的B+树。
查询数据时,加载的每个页面都代表一次I/O操作。
根据主键ID索引查询的不同,通常需要3次左右的I/O操作才能找到目标结果。
对于复杂的查询,可能需要通过二级索引来搜索记录。
从B+二级索引树中找到主键ID,然后从聚集索引中找到记录。
它采用高度为的聚集索引3最多6个I/O操作。
InnoDB表默认应该有主键,建议使用自增主键。
B+树中的主键由聚集索引组织,行数据存储在叶节点中。
查询时,直接根据B+树算法找到对应的叶子节点,得到行数据。
对“名称”列进行条件搜索需要两个步骤。
每个表都有不同的结构设计,占用不同的存储空间。
计算一个表在不同B+树深度下可以存储的记录条数。
以sp_job_log业务日志表为例,查看该表的状态信息,获取平均行大小。
显示表结构并统计B+树的行数。
常规索引和唯一索引的查询效率差别不大。
唯一索引在常规索引的基础上增加限制,保证关键词唯一,提高搜索效率。
普通索引可能包含相同的关键字,但检索操作在内存中进行,对CPU影响较小,检索效率相差无几。

mysql面试题记录:char和varchar的区别

数据库中char和varchar的区别在于长度、效率和存储方式。
首先,长度不同。
char类型具有固定长度,而varchar类型具有可变长度。
其次,关于效率。
char类型的数据长度每次改变都是一样的,效率更高。
相反,varchar类型每次改变数据长度时都不一样,效率较低。
最后,在存储方面,存储占用空间较大的char类型时,也会记录字符串的长度。
varchar类型只存储字符串的实际长度,占用空间很小。
热门文章
1
高效掌握:CMD命令轻松启动、关闭及登录... 如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...

2
MySQL分区删除技巧与8.0版本新特性... mysql删除分区在MySQL中,删除分区操作主要使用“可替代”的命令与“ dr...

3
Python代码实现:如何判断三角形的三... python三角形三条边长,判断能否构成三角形Python三角形的三个长边如下:...

4
深度解析:MySQL查询语句执行顺序及优... mysql查询语句执行顺序当这是由于执行SQL的过程时,了解其过程很重要。 ...

5
SQL教程:使用SUBSTRING和IN... sql取特定字符的前面几位字符selectsubstr('L-0FCLDRBCT...

6
MySQL日期差异计算方法:轻松获取日期... MySQL计算时间差两日期相减得月份mysql两时间相减得月MySQL计算时间之...

7
MySQL及SQL查询获取前10条数据方... MySql查询前10条数据sql语句是从MySQL获取前1 0个数据的SQL查询...

8
MySQL启动问题排查与解决指南 Mysql为什么启动不了如果要配置MySQL,则遇到无法启动的问题,可能是由于配...

9
DbVisualizer添加MySQL数... 如何在DbVisualizer中添加本地mysql数据库由于DbVisualiz...

10
SQL字段默认值设置全攻略:轻松实现自动... sql如何设置字段默认值设置SQL中某个字段的默认值;需要遵循几个步骤。首先您需...