当前位置: 首页 > article >正文

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)

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

    • 尽量缩小事务范围

相关文章:

MySQL面试知识点详解

一、MySQL基础架构 1. MySQL逻辑架构 MySQL采用分层架构设计,主要分为: 连接层:处理客户端连接、授权认证等 服务层:包含查询解析、分析、优化、缓存等 引擎层:负责数据存储和提取(InnoDB、MyISAM等&am…...

小白入门:GitHub 远程仓库使用全攻略

一、Git 核心概念 1. 三个工作区域 工作区(Working Directory):实际编辑文件的地方。 暂存区(Staging Area):准备提交的文件集合(使用git add操作)。 本地仓库(Local…...

RPC与SOAP的区别

一.RPC(远程过程调用)和SOAP(简单对象访问协议)均用于实现分布式系统中的远程通信,但两者在设计理念、协议实现及应用场景上存在显著差异。 二.对比 1.设计理念 2.协议规范 3.技术特性 4.典型应用场景 5.总结 三.总结…...

Day11-苍穹外卖(数据统计篇)

前言: 今天写day11的内容,主要讲了四个统计接口的制作。看起来内容较多,其实代码逻辑都是相似的,这里我们过一遍。 今日所学: Apache ECharts营业额统计用户统计订单统计销量排行统计 1. Apache ECharts 1.1 介绍 A…...

Tomcat简述介绍

文章目录 Web服务器Tomcat的作用Tomcat分析目录结构 Web服务器 Web服务器的作用是接收客户端的请求,给客户端作出响应。 知名Java Web服务器 Tomcat(Apache):用来开发学习使用;免费,开源JBoss&#xff0…...

《从零开始:Spring Cloud Eureka 配置与服务注册全流程》​

关于Eureka的学习,主要学习如何搭建Eureka,将order-service和product-service都注册到Eureka。 1.为什么使用Eureka? 我在实现一个查询订单功能时,希望可以根据订单中productId去获取对应商品的详细信息,但是产品服务和订单服…...

如何保证RabbitMQ消息的顺序性?

保证RabbitMQ消息的顺序性是一个常见的需求,尤其是在处理需要严格顺序的消息时。然而,默认情况下,RabbitMQ不保证消息的全局顺序,因为消息可能会通过不同的路径(例如不同的网络连接或线程)到达队列&#xf…...

FPGA学习知识(汇总)

1. wire与reg理解,阻塞与非阻塞 2. 时序取值,时钟触发沿向左看 3. ip核/setup debug 添加 ila 一、ila使用小技巧 二、同步复位、异步复位和异步复位同步释放 设计复位设计,尽量使用 异步复位同步释放;尽管该方法仍然对毛刺敏感…...

c语言 写一个五子棋

c语言 IsWin判赢 display 画 10 x 10 的棋盘 判断落子的坐标是否已有棋子 判断落子坐标范围是否超出范围 // 五子棋 #include <stdio.h> #include <stdlib.h>// 画棋盘 10 x 10的棋盘&#xff0c;len为行数 void display(char map[][10], int len) {system(&q…...

Redisson分布式锁-锁的可重入、可重试、WatchDog超时续约、multLock联锁(一文全讲透,超详细!!!)

本文涉及到使用Redis实现基础分布式锁以及Lua脚本的内容&#xff0c;如有需要可以先参考博主的上一篇文章&#xff1a;Redis实现-优惠卷秒杀(基础版本) 一、功能介绍 (1)前面分布式锁存在的问题 在JDK当中就存在一种可重入锁ReentrantLock&#xff0c;可重入指的是在同一线…...

Python爬虫实战:研究源码还原技术,实现逆向解密

1. 引言 在网络爬虫技术实际应用中,目标网站常采用各种加密手段保护数据传输和业务逻辑。传统逆向解密方法依赖人工分析和调试,效率低下且易出错。随着 Web 应用复杂度提升,特别是 JavaScript 混淆技术广泛应用,传统方法面临更大挑战。 本文提出基于源码还原的逆向解密方法…...

WordPress Relevanssi插件时间型SQL注入漏洞(CVE-2025-4396)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…...

Adobe Illustrator学习备忘

1.移动画板&#xff1a;需按住空格键加鼠标一块才能拖动 2.放大缩小画板&#xff1a;按住Alt键加鼠标滚轮 3.撤回&#xff1a;CtrlZ 4.钢笔练习网站&#xff1a;The Bzier Game...

C#中的dynamic与var:看似相似却迥然不同

在C#编程的世界里&#xff0c;var和dynamic这两个关键字常常让初学者感到困惑。它们看起来都在定义变量时省略了显式类型声明&#xff0c;但实际上它们的工作方式和应用场景有着天壤之别。今天&#xff0c;让我们一起揭开这两个关键字的神秘面纱。 var&#xff1a;编译时的类型…...

求职困境:开发、AI、运维、自动化

文章目录 问&#xff1a;我的技术栈是web全栈&#xff08;js&#xff0c;css&#xff0c;html&#xff0c;react&#xff0c;typscript&#xff09;&#xff0c;C开发&#xff0c;python开发&#xff0c;音视频图像开发&#xff0c;神经网络深度学习开发&#xff0c;运维&#…...

语言模型:AM-Thinking-v1 能和大参数语言模型媲美的 32B 单卡推理模型

介绍 a-m-team 是北科 &#xff08;Ke.com&#xff09; 的一个内部团队&#xff0c;致力于探索 AGI 技术。这是一个专注于增强推理能力的 32B 密集语言模型。 a-m-team / AM-Thinking-v1 是其旗下的一个语言模型&#xff0c;采用低成本的方式能实现和大参数模型媲美。 DeepSe…...

ChatGPT:OpenAI Codex—一款基于云的软件工程 AI 代理,赋能 ChatGPT,革新软件开发模式

ChatGPT&#xff1a;OpenAI Codex—一款基于云的软件工程 AI 代理&#xff0c;赋能 ChatGPT&#xff0c;革新软件开发模式 导读&#xff1a;2025年5月16日&#xff0c;OpenAI 发布了 Codex&#xff0c;一个基于云的软件工程 AI 代理&#xff0c;它集成在 ChatGPT 中&#xff0c…...

docker compose up -d 是一个用于 通过 Docker Compose 在后台启动多容器应用 的命令

docker compose 表示调用 Docker Compose 工具&#xff0c;用于管理基于 YAML 文件定义的多容器应用。 up 核心指令&#xff0c;作用是根据 docker-compose.yml 文件中的配置&#xff0c;创建并启动所有定义的服务、网络、卷等资源。 如果容器未创建&#xff0c;会先构建镜像&…...

智能视觉检测技术:制造业质量管控的“隐形守护者”

在工业4.0浪潮的推动下&#xff0c;制造业正经历一场以智能化为核心的变革。传统人工质检模式因效率低、误差率高、成本高昂等问题&#xff0c;逐渐难以满足现代生产对高精度、高速度的需求。智能视觉检测技术作为人工智能与机器视觉融合的产物&#xff0c;正成为制造业质量管控…...

利用html制作简历网页和求职信息网页

前言 大家好&#xff0c;我是maybe。今天下午初步学习了html的基础知识。做了两个小网页&#xff0c;一个网页是简历网页&#xff0c;一个网页是求职信息填写网页。跟大家分享一波~ 说明:我不打算上传图片。所以如果有朋友按照我的代码运行网页&#xff0c;会出现一个没有图片…...

Problem E: List练习

1.题目描述 运用List完成下面的要求: 1) 创建一个List&#xff0c;在List中增加三个工人&#xff0c;基本信息如下&#xff1a; 姓名 年龄 工资 Tom 18 3000 Peter 25 3500 Mark 22 3200 2) 插入一个工人&#xff0c;信息为&#xff1a;姓名&#xff1a;Robert&#xff0…...

卷积神经网络进阶:转置卷积与棋盘效应详解

【内容摘要】 本文深入解析卷积神经网络中的转置卷积&#xff08;反卷积&#xff09;技术&#xff0c;重点阐述标准卷积与转置卷积的计算过程、转置卷积的上采样作用&#xff0c;以及其常见问题——棋盘效应的产生原因与解决方法&#xff0c;为图像分割、超分辨率等任务提供理论…...

用 Kotlin 脚本(KTS)重塑 Android 工程效能:2000 字终极实践指南

一、KTS 核心优势解码 1.1 类型安全革命 对比 Groovy 的动态类型缺陷&#xff0c;KTS 的静态类型系统能在 编译期拦截 90% 的配置错误&#xff1a; // Groovy 的危险操作&#xff08;运行时才会报错&#xff09; dependencies {implementation "com.squareup.retrofit:…...

2025年5月13日第一轮

1.百词斩 2.安全状态和死锁 3.银行家算法和状态图 4.Vue运行 5.英语听力 6.词汇 7.英语 长篇:数学竞赛 8.数学 间断点类型和数量 The rapid development of artificial intelligence has led to widerspareasd concreasns about job displacemant.As AI technology conti…...

HarmonyOs开发之———使用HTTP访问网络资源

谢谢关注&#xff01;&#xff01; 前言&#xff1a;上一篇文章主要介绍HarmonyOs开发之———Video组件的使用:HarmonyOs开发之———Video组件的使用_华为 video标签查看-CSDN博客 HarmonyOS 网络开发入门&#xff1a;使用 HTTP 访问网络资源 HarmonyOS 作为新一代智能终端…...

小结:Android系统架构

https://developer.android.com/topic/architecture?hlzh-cn Android系统的架构&#xff0c;分为四个主要层次&#xff1a;应用程序层、应用框架层、库和运行时层以及Linux内核层。&#xff1a; 1. 应用程序层&#xff08;Applications&#xff09; 功能&#xff1a;这一层包…...

单物理机上部署多个TaskManager与调优 Flink 集群

单物理机上如何高效部署与调优 Flink 集群 一、硬件环境概述 单物理机,4CPU,16G 内存,旨在充分利用硬件资源,部署 Apache Flink 集群,实现高效的分布式流处理任务。 二、Flink 集群配置 (一)配置文件说明 进入$FLINK_HOME/conf目录。备份原始配置文件:cp flink-con…...

基于C#的MQTT通信实战:从EMQX搭建到发布订阅全解析

MQTT(Message Queueing Telemetry Transport) 消息队列遥测传输&#xff0c;在物联网领域应用的很广泛&#xff0c;它是基于Publish/Subscribe模式&#xff0c;具有简单易用&#xff0c;支持QoS&#xff0c;传输效率高的特点。 它被设计用于低带宽&#xff0c;不稳定或高延迟的…...

VUE3_ref和useTemplateRef获取组件实例,ref获取dom对象

旧写法 ref的字符串需要跟js中ref定义的变量名称一样 类型丢失&#xff0c;无法获取到ref定义的title类型 <template><div><h1 ref"title">Hello Vue3.5</h1></div> </template><script setup>import { ref, onMounted } …...

ISP中拖影问题的处理

有时候会出现如下的阴影问题该如何处理呢&#xff1f;本文将提供几个思路。 1、降低曝光时间 如果曝光时间过大&#xff0c;会统计整个曝光时间内的图像信息&#xff0c;就会导致拖影的产生&#xff0c;这个时候可以考虑降低一下曝光时间。 2、时域降噪过大 只要明白时域降噪…...