该层依次执行SQL的步骤为:
索引相关 3、MySQL为什么使用索引?
根本原因
扩张
4、索引的三种常见底层数据结构及其优缺点
三种常见的索引底层数据结构:哈希表、有序数组和搜索树。
5. 常见的索引类型有哪些以及它们如何工作?
根据叶子节点的内容,索引类型分为主键索引和非主键索引。
6、与B树索引的实现方式有什么不同? 7、为什么要设计B+树索引?
两个考虑因素:
为什么选择B+树:
8. 什么是覆盖指数和指数下推?
覆盖指数:
索引下推:
9. 哪些操作会导致索引失败? 10.与字符串加索引日志相关 11.什么是MySQL?
- 另一方面,假设某个业务的更新模式是写入后立即进行查询,那么即使满足条件,也会先记录更新,但因为会立即访问数据页,所以合并进程将立即被触发。这样,随机访问IO的数量并不会减少,反而会增加维护成本。
12、MySQL如何确定一行的扫描次数? 13. MySQL重做日志有什么区别?
14. 为什么需要重做日志? 15、为什么redo log具有crash-safe能力并且不可替代?
第一点:redo log可以保证能够判断哪些数据已经被flush,哪些数据还没有被flush
第二点:如果重做日志写入失败,则说明操作失败,事务无法提交。
16.当数据库崩溃时,如何恢复未刷新到内存的数据?
根据redo log和redo log的两阶段提交,未持久化数据分为几种情况:
17、重做日志如何写?
重做日志由两部分组成,即内存中的日志缓冲区(重做日志)和磁盘上的日志文件(重做日志文件)。
MySQL每次执行DML语句时,都会先将记录写入重做日志(用户空间),然后保存到内核空间的缓冲区OS-中。在稍后的某个时间点,它会一次性将多个操作记录写入重做日志文件。 (刷盘)。这种先写日志再写到磁盘的技术就是WAL。
可以发现写入重做日志文件的重做日志是由OS传输的。其实可以传递参数
配置时,参数值含义如下:
18、redo log的执行过程是怎样的?
我们看一下Redo log的执行过程。假设执行的SQL如下:
T 设置 a =1,其中 id =666
MySQL客户端向MySQL层发送请求语句T set a =1 where id =666。
MySQL层收到SQL请求后,对其进行分析、优化、执行等处理工作,并将生成的SQL执行计划发送给存储引擎层执行。
存储引擎层将a修改为1的操作记录到内存中。
记录到内存后,重做日志记录会被修改,会增加一行记录,其内容是需要在哪个数据页上进行哪些修改。
此后,事务状态设置为 ,表示事务已准备好提交。
MySQL层处理完事务后,会将事务的状态设置为,即提交事务。
重做日志收到事务提交请求后,会将刚刚写入内存的操作记录写入磁盘,从而完成整个日志记录过程。
19、什么是概念,起什么作用?能保证万无一失吗? 20. 什么是两阶段提交?
MySQL将重做日志的写入分为两步:和,中间穿插写入。这就是“两阶段提交”。
两阶段提交是为了保持两个状态逻辑上一致。用于在主机出现故障时恢复未更新的物理数据,并用于备份操作。两者本身是两个独立的实体。如果它们想要保持一致,就必须使用分布式事务解决方案进行处理。
为什么需要两阶段提交?
恢复数据时,如果状态为 ,则表示恢复成功,可以直接恢复数据;如果是,则需要查询对应的事务是否成功,并决定是否回滚或执行。
21. MySQL如何知道它已经完成?
一笔交易有完整的格式:
22.什么是WAL技术,它有什么优点?
WAL,中文全称是Write-Ahead,它的要点是日志先写入内存,再写入磁盘。 MySQL执行更新操作后,会在实际将数据写入磁盘之前记录日志。
优点是不需要每次操作都实时将数据写入磁盘。即使崩溃后,也可以通过重做日志进行恢复,因此可以快速响应SQL语句。
23.日志的三种格式
日志有三种格式
格式
每一条修改数据的SQL都会被记录在
行格式
不记录SQL语句上下文相关信息,只保存修改了哪条记录。
混合格式
其实就是和Row的结合。一般语句修改以某种格式保存。例如,如果某些函数无法完成主从复制操作,则以行格式保存。 MySQL会根据每条具体执行的SQL语句来区分记录的日志格式。
24.重做日志格式
重做日志(在内存中)由四个首尾相连的文件组成,它们是:、、、。
25. 一条可以执行得很快的SQL语句实际上执行得比预期慢得多。原因是什么?怎么解决呢?
原因:从大到小可以分为四种情况。
解决:
26. 数据页结构
一个数据页大致分为七个部分
数据相关
27、MySQL如何保证数据不丢失? 28. 如果不小心删除了数据怎么办?
DBA的核心工作是保证数据的完整性。必须首先采取预防措施。预防措施大概是通过以下几点:
29. drop和30. MySQL中有两个kill命令
杀不掉的原因
31.如何理解MySQL的读发送功能? 32、为什么MySQL的大表查询不会爆内存? 33. MySQL临时表的用法和特点 34. MySQL存储引擎简介(,,) 35. 我们已经同意了,那么还需要使用引擎吗? 36、如果数据库误操作,如何进行数据恢复?
如果数据库在某个时刻发生误操作,可以找到距离误操作最近的时间节点的bin log,重播到临时数据库中,然后选择误删除的数据节点恢复到在线数据库中。
主从备份相关 37、MySQL如何保证主从同步?
主从关系的建立:
MySQL主备切换流程:
一个事务的完整同步过程:
38. 什么是主备时延?
主备库执行同一个事务时存在时间差。主要原因有:
39、为什么会有多线程复制策略? 40、MySQL的并行策略有哪些? 41、MySQL的一主一从和一主多从有什么区别?
一主一从双M架构下,主从切换只需将客户端流量切换到备库即可;主从架构中,主备切换除了需要将客户端流量切换到备库之外,还需要将客户端流量切换到备库。需要将从库连接到新的主库上。
42、主数据库出现问题如何解决? 43、MySQL读写分离涉及到读过期问题的几种解决方案? 44、MySQL的并发连接和并发查询有什么区别?
性能相关
45、短时间内提高MySQL性能的方法 46、为什么MySQL的自增主键ID不连续? 47、为什么要用自增ID作为主键? 48.如何最快地复制表? 49. Grant 和flush 语句 50. 我应该使用分区表吗? 51.Join用法 52.MySQL有哪些自增ID?分别是什么场景? 53. MySQL内部Xid是如何生成的?
MySQL内部维护一个全局变量。每次执行一条语句(包括语句)时,都会给它赋值,然后这个变量加1。如果当前语句是该事务执行的第一条语句,MySQL也会同时将该值赋给该事务的Xid。
它是一个纯内存变量,重启后会被清除。所以你知道在同一个数据库实例中,不同事务的Xid可能是相同的。不过MySQL重启后会重新生成一个新文件,这就保证了同一个文件中Xid必须是唯一的。
锁相关 54.我们来谈谈MySQL的锁。 55. 什么是幻读?
同一个事务中,同一个范围的数据被查询了两次,第二次看到了第一次没有查询到的数据。
幻读发生的场景:
幻读引起的问题:
解决:
其他为什么系列
56、MySQL为什么会发抖? 57、为什么删除表后表文件大小仍保持不变? 58. Count(*)实现及各种计数的比较 59. 排序的内部原理 60. 如何高效使用MySQL显式随机消息
mysql> 从 t 计数(*)到@C;设置@Y1 = 地板(@C * rand());设置@Y2 = 地板(@C * rand());设置@Y3 = 地板(@C * rand());设置@Y3 = 地板(@C * rand()) ());Ymax = max(Y1,Y2,Y3)Ymin = min(Y1,Y2,Y3) t 限制 Ymin 的 id,(Ymax - Ymin)
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。