MySQL面试题(updating)

MySQL

目录

MySQL

MySQL 的存储引擎有哪些?它们之间有什么区别?

MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别?

MySQL 的索引类型有哪些?

为什么 MySQL 选择使用 B+ 树作为索引结构?

MySQL 索引的最左前缀匹配原则是什么?

MySQL 三层 B+ 树能存多少数据?

MySQL 中的回表是什么?

MySQL 中使用索引一定有效吗?如何排查索引效果?

在 MySQL 中建索引时需要注意哪些事项?

MySQL 中的索引数量是否越多越好?为什么?

如何使用 MySQL 的 EXPLAIN 语句进行查询分析?

MySQL 中如何进行 SQL 调优?

请详细描述 MySQL 的 B+ 树中查询数据的全过程

MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?

MySQL 中 varchar 和 char 有什么区别?

MySQL 是如何实现事务的?

MySQL 中的 MVCC 是什么?

MySQL 中的日志类型有哪些?binlog、redo log 和 undo log 的作用和区别是什么?

MySQL 中的事务隔离级别有哪些?

MySQL 默认的事务隔离级别是什么?为什么选择这个级别?

数据库的脏读、不可重复读和幻读分别是什么?

MySQL 中有哪些锁类型?

MySQL 事务的二阶段提交是什么?

MySQL 中如果发生死锁应该如何解决?

MySQL 中如何解决深度分页的问题?

什么是 MySQL 的主从同步机制?它是如何实现的?

如何处理 MySQL 的主从同步延迟?


MySQL 的存储引擎有哪些?它们之间有什么区别?

MySQL常见的存储引擎有InnoDB、MyISAM、Memory;InnoDB支持事务、外键,使用行级锁,并发性能高;MyISAM不支持事务、外键,使用表级锁,读取性能高;Memory存储在内存,性能高,但重启后数据丢失。

MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别?

在默认情况下,聚簇索引和非聚簇索引都是B+树结构的,不同的是,聚簇索引的叶子节点直接存储数据行;非聚簇索引的叶子节点存储主键和对应列,所以在使用非聚簇索引时查询完整数据时会发生回表。其次,在一个表中聚簇索引只有一个,通常是主键索引;而非聚簇索引可以有多个。

MySQL 的索引类型有哪些?

按照数据结构分类有B+索引、Hash索引、倒排索引

按照Innodb中的b+索引可以细分为 聚簇索引和非聚簇索引

按照索引的性质可以分为主键索引、普通索引、外键索引、唯一索引、全文索引

为什么 MySQL 选择使用 B+ 树作为索引结构?

使用B+树有很多优点:

首先,B+树查询稳定高效,B+树是自平衡树,每个叶子节点到根节点的长度相等

其次,B+树存储的数据多,三层B+树就可存储两千多万条数据

最后,B+树叶子节点上存在双向链表,适合范围查询

MySQL 索引的最左前缀匹配原则是什么?

最左匹配原则是指创建了联合索引时,如果想走索引那么查询条件中的列的顺序必须按照联合索引中的顺序进行查询,这是因为索引的B+树结果就是按照联合索引中列的顺序进行构建的。

MySQL 三层 B+ 树能存多少数据?

Mysql的Innodb默认的数据页大小为16kb,也就是b+树上每个节点能存储16kb大小的数据,在叶子节点上,主键和记录的大小假设为1kb,那么一个叶子节点能存储16/1也就是16条数据;非叶子节点上存储的数据(索引键和指针)为8+6=14b,所以一个非叶子节点可以存161024/14=1170个子节点,那么三层b+树一共可以存储1170*1170*16=21900000条,约等于两千两百万条数据。

MySQL 中的回表是什么?

回表是指在使用非聚簇索引查询数据时,因为非聚簇索引的叶子节点只存储索引值以及主键值,所以如果需要查询其他数据的话就要根据查询到的主键值再利用聚簇索引进行查询。

MySQL 中使用索引一定有效吗?如何排查索引效果?

使用索引不一定有效,例如索引不符合最左匹配原则、索引中存在运算或者类型转换、使用模糊查询时占位符开头、order By后的索引等都会导致索引失效。

排查索引使用效果可以使用expain关键字,重点关注type、key、row三个参数。type代表使用的索引类型,key代表索引名称,row代表扫描的行数。

在 MySQL 中建索引时需要注意哪些事项?

索引不是越多越好,像是有大量重复值的字段、长字段或者频繁修改要慎重建索引,如果是需要频繁查询的字段、经常在order by、group by后的字段可以建立索引。

MySQL 中的索引数量是否越多越好?为什么?

索引并不是越多越好,在时间成本上,每次对数据进行更新操作时都需要对索引进行更新,另外,索引越多,优化器选择索引的时间成本也就越高;在空间成本上,每建立一个索引,都需要创建一个B+树,每个数据页默认大小为16kb,数据量越大,索引越多,空间成本也就越大。

如何使用 MySQL 的 EXPLAIN 语句进行查询分析?

explain主要用于sql分析,重点关注以下几个字段。type:表示访问的类型,const代表使用主键索引或者唯一索引进行等值查询;eq_ref表示在连接查询中一个表的唯一索引被另一个表的非唯一索引引用;ref表示对非唯一索引进行扫描;range表示范围查询;index表示全行扫描索引;all表示全表扫描。key代表使用的索引名称。row代表扫描的行数

MySQL 中如何进行 SQL 调优?

进行sql调优首先开启慢SQL日志,找到执行缓慢的SQL语句,使用explain语句进行解释,优化sql主要有两个方面,首先是命中索引:例如符合最左匹配原则、索引列避免计算和类型转换、模糊查询时不能以通配符开头;其次是避免回表,尽量使用覆盖索引。


请详细描述 MySQL 的 B+ 树中查询数据的全过程

首先从根节点出发,根据数据大小自上而下找到数据所在的根节点,根节点上有一个数据页,默认大小为16kb,一个数据页上能存储很多行数据,这些数据会被分成多个组,查找数据时会根据页目录进行二分查找找到数据所在的组,然后组内通过链表的遍历找到指定数据。

MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?

这三者都是用来统计行数的聚合函数,count(*)、count(1)可以统计包含null的行,效率较高,count(字段名)是用来统计非null的行数,因为需要进行null的判断,所以效率相较于前两者低。

MySQL 中 varchar 和 char 有什么区别?

char是固定长度的字符串,当实际存储的字符串长度小于定义的长度时,会在末尾使用空格填充,使用与存储电话号码、身份证等固定长度信息。varchar是可变长度的字符串,存储的长度为实际字符串长度加上1或2个字节大小,这1或2个字节存储字符串的大小信息。

MySQL 是如何实现事务的?

MySQL主要通过锁、日志以及MVCC来实现事务。MySQL使用锁来控制并发访问,实现了事务的隔离性;redo Log记录了所有的事务操作,在系统故障时用来恢复数据,实现了事务的持久性;undo Log记录了事物的反向操作,在事务出现异常时用来恢复到事务开始前的状态,实现了事务的原子性;MVCC机制实现了非锁定读,提高了并发读的性能,实现了事务的隔离性。

MySQL 中的 MVCC 是什么?

MVCC,多版本并发控制,MySQL会对每一个事务创建一个数据快照,当数据被修改时不会立即覆盖旧数据,而是会创建新的版本,多个版本间形成版本链,当进行普通读时,会通过MVCC版本访问规则进行读取版本链中的数据,不影响写操作,提高了数据库的并发性能。

MySQL 中的日志类型有哪些?binlog、redo log 和 undo log 的作用和区别是什么?

MySQL常见的日志有binlog、redo log以及undo log

binlog记录了MySQL的操作,包括DDL、DML;redo log记录了数据页的变化,当系统出现故障用来恢复数据;undo log记录了一个事务的所有反向操作,当事务出现异常时用来进行回滚操作,

区别:binlog是基于MySQL服务器的,redo log和undo log是innodb持有的。binlog记录的是逻辑操作,SQL语句,redo log记录的是数据的物理变化,所以binlog可以跨平台(存储引擎)使用,而后者不能;redo log用于数据的恢复,undo log用于数据的回滚。

MySQL 中的事务隔离级别有哪些?

事务的隔离级别有:读未提交,可能会出现脏读;读已提交,会出现不可重复读;可重复读,可能会出现幻读;串行化。

MySQL 默认的事务隔离级别是什么?为什么选择这个级别?

MySQL默认的隔离级别为可重复读,这是为了兼容binlog的statement格式,避免在主从数据同步时出现不一致现象。

数据库的脏读、不可重复读和幻读分别是什么?

脏读:读取了事务未提交的数据,然后事务回滚。

不可重复读,在一个事务中两个相同的查询返回的数据不相同。

幻读:在一个事务中多次相同的查询得到的数据数量不同。

MySQL 中有哪些锁类型?

按照锁的作用范围可以分为:全局锁、表级锁、行级锁

按照作用区间可以分为:记录锁、间隙锁、临键锁

按照锁的属性可以分为:共享锁和排它锁

MySQL 事务的二阶段提交是什么?

二阶段提交是为了保证redo log日志和bin log日志一致的一种机制。分为两个阶段,准备阶段事务提交时,首先innodb会先写入redo log,并将其标记为prepare;然后进入提交阶段,server层写入bin log日志,写完后通知innodb将redo log日志标记为commit,表示事务完成。

MySQL 中如果发生死锁应该如何解决?

首先mysql自带死锁检测机制,出现死锁时,mysql会自动回滚其中一个事务释放资源

其次可以设置锁的等待时间,当等待时间超过阈值时会释放资源进行回滚

最后也可以使用命令查看死锁日志,定位发生死锁的事务以及线程id,然后手动kill线程释放资源

MySQL 中如何解决深度分页的问题?

深度分页是指当数据量很大时分页查询靠后数据是查询效率下降的现象。

1.可以使用子查询进行优化,减少回表次数;

2.当分页查询是连续的时,可以记录当前查询的位置,作为下次查询的起点;

3.使用搜索引擎es查询

什么是 MySQL 的主从同步机制?它是如何实现的?

MySQL主从同步是指将一个主数据库上的数据复制到一个或多个从数据库上的操作。

MySQL主从同步利用bin log日志,在主数据库进行写操作时会记录到bin log日志中,需要同步时推送给从数据库进行重放。

如何处理 MySQL 的主从同步延迟?

主从同步延迟是指主从数据库进行同步时由于日志推送、重放等需要时间,所以同步存在延迟,无法避免,只能减少。

可以使用二次查询,从数据库查不到时再去主数据库查询;使用缓存,查询时先查询缓存;关键业务走主数据库等方法减少延迟。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/500855.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity Canvas中显示粒子特效

首先在场景中新建一个粒子特效 修改一下参数 1.改变粒子特效的渲染层级,层级修改为UI层,由UI相机渲染 使用粒子特效的Sorting Layer ID和Order In Layer,Sorting Layer ID设置为UI(如果没有UI层则新建就好了),对UI进行排序 对于要显示在前的UI组件添加Canvas组件,设置O…

Linux下部署Redis集群 - 一主二从三哨兵模式

三台服务器redis一主二从三哨兵模式搭建 最近使用到了redis集群部署,使用一主二从三哨兵集群部署redis,将自己部署的过程中的使用心得分享给大家,希望大家以后部署的过程减少一些坑。 服务器准备 3台服务器 ,确定主redis和从red…

服务器端请求伪造之基本介绍

一.服务器端请求伪造漏洞基础 1.客户端请求 客户端请求指的是由客户端设备(如个人计算机、智能手机、平板电脑等)或软件(浏览器、各种APP)发出的请求,以获取指定的网页、图片、视频或其他资源。比如当用户在浏览器中输…

akamai3.0反爬教程逆向分析9个视频汇总

目录 一、akamai2.0文章二、akamai3.0每月疑似改版点二、9个视频汇总如下 一、akamai2.0文章 文章1cookie反爬之akamai_2.0-上文章2cookie反爬之akamai_2.0-上文章3cookie反爬之akamai_2.0-上文章中akamai2.0对应调试html与js文件 二、akamai3.0每月疑似改版点 详细文字与2.…

2024年12月 Scratch 图形化(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch图形化等级考试(1~4级)全部真题・点这里 一、单选题(共25题,共50分) 第 1 题 小猫初始位置和方向如下图所示,下面哪个选项能让小猫吃到老鼠?( ) A. B. C.

【74LS160+74LS273DW锁存器8位的使用频率计】2022-7-12

缘由 想知道这个数字频率计仿真哪里出现错误了,一直无法运行哎,如何解决?-运维-CSDN问答

系统思考—信任

《基业长青》作者指出:“在人生的重要十字路口,选择信任是一场赌注。信任带来的好处可能巨大,而失去信任的代价却相对有限。但如果选择不信任,最优秀的人才可能因失望而离开。” 在企业管理中,信任不仅是人际关系的纽…

推理加速:投机采样经典方法

一 SpecInfer 基于模型 SpecInfer([2305.09781] SpecInfer: Accelerating Generative Large Language Model Serving with Tree-based Speculative Inference and Verification) SpecInfer 投机采样利用多个小型模型(SSM)快速生…

深入理解Java中的Set集合:特性、用法与常见操作指南

一、HashSet集合 1.HashSet集合的特点 2.HashSet常用方法 ①:add(Object o):向Set集合中添加元素,不允许添加重复数据。 ②:size():返回Set集合中的元素个数 ③.remove(Object o): 删除Set集合中的obj对…

黑马Java面试教程_P10_设计模式

系列博客目录 文章目录 系列博客目录前言1. 工厂方法模式1.1 概述1.2 简单工厂模式1.2.1 结构1.2.2 实现1.2.3 优缺点 1.3 工厂方法模式1.3.1 概念1.3.2 结构1.3.3 实现1.3.4 优缺点 1.4 抽象工厂模式1.4.1 概念1.4.2 结构1.4.3 实现1.4.4 优缺点1.4.5 使用场景 总结&#xff0…

开源架构的容器化部署优化版

上三篇文章推荐: 开源架构的微服务架构实践优化版(New) 开源架构中的数据库选择优化版(New) 开源架构学习指南:文档与资源的智慧锦囊(New) 我管理的社区推荐:【青云交社区…

SpringCloudAlibaba实战入门之Sentinel服务降级和服务熔断(十五)

一、Sentinel概述 1、Sentinel是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 一句话概括:sentinel即Hystrix的替代品,官网: https://sentinelguard.io/zh…

【每日学点鸿蒙知识】导入cardEmulation、自定义装饰器、CallState状态码顺序、kv配置、签名文件配置

1、HarmonyOS 无法导入cardEmulation? 在工程entry mudule里的index.ets文件里导入cardEmulation失败 可以按照下面方式添加SystemCapability;在src/main/syscap.json(此文件需要手动创建)中添加如下内容 {"devices": {"gen…

Datawhale AI冬令营(第二期)动手学AI Agent--Task3:学Agent工作流搭建,创作进阶Agent

目录 一、工作流:制作复杂Agent的福音! 二、支付宝百宝箱中工作流介绍 三、设计工作流 3.1 准备功能模块 3.2组合工作流 3.3 模块测试需要注意什么 3.4迭代优化 四、高中学习小助手工作流设计 4.1 选题调研 4.2 功能模块设计 4.3 组合完整工作…

Postman[8] 断言

1.常见的断言类型 status code: code is 200 //检查返回的状态码是否为200 Response body: contain string //检查响应中包含指定字符串包含指定的值 response body:json value check/ /检查响应中其中json的值 Response body: is equal to string …

python openyxl 用法 教程

Python自动化办公:openpyxl教程(基础)-CSDN博客 https://zhuanlan.zhihu.com/p/342422919 https://openpyxl-chinese-docs.readthedocs.io/zh-cn/latest/tutorial.html 列标题,是这一列 对应的单元格的格式,默认是常规,设置之后…

深入解析 Wireshark 的 TLS 设置:应用场景与实操技巧

简述 在网络数据分析中,传输层安全(TLS)协议的流量解密和分析是一项重要的技能。Wireshark 提供了专门的设置选项,帮助用户处理 TLS 流量,例如解密会话、重组分片等。本文将详细解析上图所示的 Wireshark TLS 设置功能…

每天五分钟机器学习:凸集

本文重点 在SVM中,目标函数是一个凸函数,约束集合是一个凸集。因此,SVM问题可以转化为一个凸规划问题来求解。这使得SVM在实际应用中具有较高的计算效率和准确性。 凸集的定义 凸集是指一个集合中的任意两点之间的线段都完全包含在这个集合中。换句话说,给定集合C中的两…

stm32 智能语音电梯系统

做了个stm32智能语音控制的电梯模型,总结一下功能,源码用ST的HAL库写的,整体流程分明。 实物图 这个是整个板子的图片,逻辑其实并不复杂,只是功能比较多,在我看来都是一些冗余的功能,但也可能是…

AI 助力游戏开发中的常用算法实现

在当今的游戏开发领域,人工智能(AI)技术的应用已经成为推动行业发展的关键力量。AI不仅能够提升游戏的智能化水平,还能够增强玩家的沉浸感和游戏体验。随着技术的进步,AI在游戏设计、开发和测试中的应用越来越广泛&…