MySQL面试知识点详解

一、MySQL基础架构

1. MySQL逻辑架构

MySQL采用分层架构设计,主要分为:

  • 连接层:处理客户端连接、授权认证等

  • 服务层:包含查询解析、分析、优化、缓存等

  • 引擎层:负责数据存储和提取(InnoDB、MyISAM等)

2. 查询执行流程

  1. 客户端发送SQL语句

  2. 连接器验证身份

  3. 查询缓存(MySQL 8.0已移除)

  4. 分析器进行词法语法分析

  5. 优化器生成执行计划

  6. 执行器调用存储引擎接口执行

二、存储引擎对比

InnoDB vs MyISAM

特性InnoDBMyISAM
事务支持支持不支持
锁粒度行锁表锁
外键支持不支持
崩溃恢复支持不支持
全文索引MySQL 5.6+支持支持
存储文件.frm, .ibd.frm, .MYD, .MYI
适合场景高并发写/事务型应用读多写少/非事务应用

三、索引原理与优化

1. 索引类型

  • B+树索引:最常用,适合范围查询

  • 哈希索引:精确匹配快,不支持范围查询

  • 全文索引:用于文本搜索

  • 空间索引:用于地理数据

2. B+树索引特点

  • 多路平衡查找树

  • 非叶子节点只存键值

  • 叶子节点形成有序链表

  • 通常3-4层就能存储大量数据

3. 索引优化原则

  1. 最左前缀原则

  2. 避免在索引列上使用函数

  3. 选择合适的索引列顺序

  4. 使用覆盖索引减少回表

  5. 避免过度索引

四、事务与锁机制

1. 事务特性(ACID)

  • 原子性(Atomicity):事务不可分割

  • 一致性(Consistency):数据状态一致

  • 隔离性(Isolation):事务间相互隔离

  • 持久性(Durability):提交后永久生效

2. 事务隔离级别

隔离级别脏读不可重复读幻读
READ UNCOMMITTED
READ COMMITTED×
REPEATABLE READ××
SERIALIZABLE×××

3. 锁类型

  • 共享锁(S锁):读锁,多个事务可同时持有

  • 排他锁(X锁):写锁,独占资源

  • 意向锁:表级锁,表明事务将要获取的行锁类型

  • 间隙锁:锁定索引记录间隙,防止幻读

  • 临键锁:记录锁+间隙锁组合

五、SQL优化技巧

1. EXPLAIN执行计划分析

关键字段:

  • type:访问类型(const > eq_ref > ref > range > index > ALL)

  • key:实际使用的索引

  • rows:预估扫描行数

  • Extra:额外信息(Using index/Using filesort等)

2. 常见优化方法

  1. 避免SELECT *,只查询需要的列

  2. 合理使用JOIN,小表驱动大表

  3. 避免在WHERE子句中对字段进行NULL值判断

  4. 使用LIMIT分页时优化大偏移量查询

  5. 避免使用OR连接条件,考虑使用UNION ALL

六、高可用与性能调优

1. 主从复制原理

  1. 主库将变更写入binlog

  2. 从库IO线程读取主库binlog

  3. 从库SQL线程重放binlog中的事件

2. 分库分表策略

  • 垂直拆分:按业务维度拆分

  • 水平拆分:按数据行拆分

  • 常见中间件:MyCat、ShardingSphere

3. 性能调优参数

ini

复制

下载

# 缓冲池大小(推荐总内存的50-70%)
innodb_buffer_pool_size = 4G# 日志文件大小
innodb_log_file_size = 256M# 连接数设置
max_connections = 500
thread_cache_size = 50# 查询缓存(MySQL 8.0已移除)
query_cache_size = 0

七、常见面试题

  1. 为什么使用B+树而不是B树?

    • B+树非叶子节点不存数据,能容纳更多键值

    • 叶子节点形成链表,范围查询更高效

    • 查询性能更稳定(任何查询都要到叶子节点)

  2. 什么是回表查询?如何避免?

    • 回表:通过二级索引查到主键后,再通过主键查完整数据

    • 避免:使用覆盖索引(查询列都在索引中)

  3. MVCC实现原理?

    • 通过版本链和ReadView实现

    • 每行记录有隐藏字段:DB_TRX_ID(事务ID)、DB_ROLL_PTR(回滚指针)

    • ReadView包含:m_ids(活跃事务列表)、min_trx_id、max_trx_id等

  4. 大表优化方案?

    • 分库分表

    • 读写分离

    • 冷热数据分离

    • 适当增加冗余字段减少JOIN

  5. 如何解决死锁问题?

    • 设置锁等待超时参数:innodb_lock_wait_timeout

    • 分析死锁日志(show engine innodb status)

    • 保证事务中锁的获取顺序一致

    • 尽量缩小事务范围

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

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

相关文章

牛客网NC22000:数字反转之-三位数

牛客网NC22000:数字反转之-三位数 🔍 题目描述 时间限制:C/C/Rust/Pascal 1秒,其他语言2秒 空间限制:C/C/Rust/Pascal 32M,其他语言64M 📝 输入输出说明 输入描述: 输入一个3位整数n (100 ≤ n ≤ 999)…

C++跨平台开发:突破不同平台的技术密码

Windows 平台开发经验 开发环境搭建 在 Windows 平台进行 C 开发,最常用的集成开发环境(IDE)是 Visual Studio。你可以从Visual Studio 官网下载安装包,根据安装向导进行安装。安装时,在 “工作负载” 界面中&#xff…

[250516] OpenAI 升级 ChatGPT:GPT-4.1 及 Mini 版上线!

目录 ChatGPT 迎来重要更新:GPT-4.1 和 GPT-4.1 mini 正式上线用户如何访问新模型?技术亮点与用户体验优化 ChatGPT 迎来重要更新:GPT-4.1 和 GPT-4.1 mini 正式上线 OpenAI 宣布在 ChatGPT 平台正式推出其最新的 AI 模型 GPT-4.1 和 GPT-4.…

计算机指令分类和具体的表示的方式

1.关于计算机的指令系统 下面的这个就是我们的一个简单的计算机里面涉及到的指令: m就是我们的存储器里面的地址,可以理解为memory这个意思,r可以理解为rom这样的单词的首字母,帮助我们去进行这个相关的指令的记忆,不…

前端脚手架开发指南:提高开发效率的核心操作

前端脚手架通过自动化的方式可以提高开发效率并减少重复工作,而最强大的脚手架并不是现成的那些工具而是属于你自己团队量身定制的脚手架!本篇文章将带你了解脚手架开发的基本技巧,帮助你掌握如何构建适合自己需求的工具,并带着你…

SpringBoot常用注解详解

文章目录 1. 前言2. 核心注解2.1 SpringBootApplication2.2 Configuration2.3 EnableAutoConfiguration2.4 ComponentScan2.5 Bean2.6 Autowired2.7 Qualifier2.8 Primary2.9 Value2.10 PropertySource2.11 ConfigurationProperties2.12 Profile 3. Web开发相关注解3.1 Control…

项目管理进阶:全文解读企业IT系统全生命周期管理与运营平台建设方案【附全文阅读】

本文介绍了《企业IT系统全生命周期管理与运营平台建设方案》的项目内容,包括项目背景、蓝图架构、核心业务流程、系统总体架构、解决方案等。 重点内容: 1. 项目背景:介绍企业IT系统全生命周期管理的重要性。 2. 蓝图架构:描述项目…

记录一次vue项目页面内嵌iframe页面实现跨域上传和下载附件的功能

功能背景:项目部署在外网,然后其中有一个功能需要上传下载附件,附件是上传到华为云对象存储服务OBS中(私有云),所以采用iframe嵌套页面的方式解决跨域问题。 实现思路: 1、父窗口封装一个组件专…

rust语言,与c,go语言一样也是编译成二进制文件吗?

是的,Rust 和 C、Go 一样,默认情况下会将代码编译成二进制可执行文件(如 ELF、PE、Mach-O 等格式),但它们的编译过程和运行时特性有所不同: 1. Rust(类似 C,直接编译为机器码&#x…

后端框架(3):Spring(2)

AOP 概述:AspectOrientedProgramming 面向切面编程:是对面向对象编程的补充延续,面向切面编程思想是将程序中非业务代码(提交事务,打印日志,权限验证,统一异常处理) 然后在调用业务代码时,通过…

Vue3中setup运行时机介绍

在 Vue3 中&#xff0c;直接写在 <script setup>...</script> 中的代码运行时机可以分为以下几个关键阶段&#xff1a; 一、执行顺序层级 #mermaid-svg-bF3p98MiNdLfcoSG {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#33…

Ubuntu快速安装Python3.11及多版本管理

之前文章和大家分享过&#xff0c;将会出一篇专栏&#xff08;从电脑装ubuntu系统&#xff0c;到安装ubuntu的常用基础软件&#xff1a;jdk、python、node、nginx、maven、supervisor、minio、docker、git、mysql、redis、postgresql、mq、ollama等&#xff09;&#xff0c;目前…

裸金属服务器和云服务器之间的差别

裸金属服务器能够直接在硬件上运行&#xff0c;不需要额外的虚化层&#xff0c;让每个应用程序或者是服务都能够在实际的硬件上运行&#xff0c;不需要和其他虚拟服务器来共享资源&#xff1b;而云服务器作为一种虚拟服务器&#xff0c;是通过虚拟化技术为企业提供一个独立的计…

C++ 中的几种锁机制整理

1. 互斥锁&#xff08;std::mutex&#xff09; ✅ 简介 最常用的线程同步工具。保证同一时间只能有一个线程访问临界区。 ✅ 使用方式 #include <mutex>std::mutex mtx;void safeFunction() {std::lock_guard<std::mutex> lock(mtx);// 临界区代码 }✅ 优点 简…

Graph Representation Learning【图最短路径优化/Node2vec/Deepwalk】

文章目录 Q1&#xff1a;网络性质&#xff1a;1.数据读取与邻接表构建&#xff1a;2.基本特征和连通性&#xff1a; 算法思路&#xff1a;1. 广度优先搜索&#xff08;BFS&#xff09;标记前驱:2. 回溯生成所有最短路径: 实验结果&#xff1a;复杂度分析&#xff1a; Q2&#x…

MATLAB中的概率分布生成:从理论到实践

MATLAB中的概率分布生成&#xff1a;从理论到实践 引言 MATLAB作为一款强大的科学计算软件&#xff0c;在统计分析、数据模拟和概率建模方面提供了丰富的功能。本文将介绍如何使用MATLAB生成各种常见的概率分布&#xff0c;包括均匀分布、正态分布、泊松分布等&#xff0c;并…

经典算法 (A/B) mod C

(A/B) mod C 问题描述 求(A/B)%C&#xff0c;但由于A和B实在太大了&#xff0c;我们只给出A % C&#xff0c;B % C。 (我们保证给定的A必能被B整除&#xff0c;且gcd(B,C) 1)。 输入描述 输入一行三个整数&#xff0c;分别是A % C&#xff0c;B % C&#xff0c;C。 输出…

大数据技术的主要方向及其应用详解

文章目录 一、大数据技术概述二、大数据存储与管理方向1. 分布式文件系统2. NoSQL数据库3. 数据仓库技术 三、大数据处理与分析方向1. 批处理技术2. 流处理技术3. 交互式分析4. 图计算技术 四、大数据机器学习方向1. 分布式机器学习2. 深度学习平台3. 自动机器学习(AutoML) 五、…

Deeper and Wider Siamese Networks for Real-Time Visual Tracking

现象&#xff1a; the backbone networks used in Siamese trackers are relatively shallow, such as AlexNet , which does not fully take advantage of the capability of modern deep neural networks. direct replacement of backbones with existing powerful archite…

ubuntu22.04卸载vscode

方法 1&#xff1a;通过 Snap 卸载 VSCode 如果你是通过 Snap 安装的 VSCode&#xff08;Ubuntu 22.04 默认推荐方式&#xff09;&#xff0c;按照以下步骤卸载&#xff1a; 检查是否通过 Snap 安装&#xff1a; bash snap list | grep code如果输出显示 code&#xff0c;说明…