MySQL面试01
MySQL 索引的最左原则
🍰 最左原则本质
=͟͟͞͞( •̀д•́) 想象复合索引是电话号码簿!
索引 (a,b,c) 的排列顺序:
先按a排序 → a相同按b排序 → 最后按c排序
生效场景三连:
1️⃣ WHERE a=1 ✅
2️⃣ WHERE a=1 AND b=2 ✅
3️⃣ WHERE a=1 AND b=2 AND c=3 ✅
💣 失效场景三连:
1️⃣ WHERE b=2 ❌ (跳过了a)
2️⃣ WHERE a=1 AND c=3 ❌ (中间断了b)
3️⃣ WHERE b=2 AND c=3 ❌ (首列失踪)
✨ 特殊技巧:
WHERE a>1 AND b=2→ 只有a能用索引(范围查询后断链)WHERE a=1 ORDER BY b,c→ 排序也能用索引!WHERE a LIKE '张%'✅ (前缀匹配)
哦呜(°ロ°)!曼波举个栗子:
索引是(班级, 姓名, 年龄)
✅ 查"3班 张三" → 直接翻到3班区域找张三
❌ 直接查"年龄18" → 要扫描全校学生
InnoDB 和 Mylsam 引擎的区别?
这两个引擎的区别就像奶茶和咖啡的选择,要根据场景来pick哦!
🍵 MyISAM(经典奶茶型)
=͟͟͞͞( •̀д•́) 适合读多写少的场景!
- 不支持事务(像现金交易,要么成功要么失败)
- 表级锁(修改时要锁整个表)
- 存储结构:
.MYD数据文件 +.MYI索引文件(像分开的奶茶和珍珠) - 特色技能:
✅ 全文索引
✅ COUNT(*) 超快(自带计数器)
❌ 崩溃后容易数据损坏
☕ InnoDB(现代咖啡机型)
(๑•̀ㅂ•́)و✧ 适合高并发事务场景!
- 支持ACID事务(像电子支付可回滚)
- 行级锁(只锁修改的行)
- 存储结构:
聚簇索引(数据&索引存在一起像浓缩咖啡) - 特色技能:
✅ 外键约束
✅ 崩溃自动恢复(redo log像咖啡机自动清洁)
✅ MVCC多版本并发控制
📊 性能对比小剧场:
- 全表COUNT:MyISAM 🚀(秒出结果) vs InnoDB 🐢(要扫描)
- 并发写入:MyISAM 😵(表锁阻塞) vs InnoDB 😎(行锁流畅)
- 数据安全:MyISAM 🚑(需定期修复) vs InnoDB 🛡️(自动恢复)
(✪▽✪)曼波~~ 现在主流都用InnoDB啦~就像大家现在更爱喝手冲咖啡!除非特殊需求(比如全文检索),否则推荐默认选InnoDB哦!
有哪些优化数据库性能的方法?
一、💡 SQL 优化三板斧
1. EXPLAIN 大法
EXPLAIN SELECT * FROM users WHERE age > 25 ORDER BY create_time;
-- 重点观察:type(扫描类型)、key(使用索引)、rows(扫描行数)
2. 索引优化技巧
- 给WHERE/ORDER BY/JOIN字段加索引
- 避免在索引列上做计算:
WHERE YEAR(create_time)=2023❌ - 使用覆盖索引:
SELECT 索引字段
3. 慢查询日志分析
# my.cnf 配置
slow_query_log = 1
long_query_time = 1 # 超过1秒的查询
用mysqldumpslow工具分析日志
二、🚀 结构设计优化
1. 三范式与反范式的平衡
- 适度冗余:减少JOIN次数
- 大字段分离:把TEXT/BLOB单独存表
2. 分区表实战
-- 按时间范围分区
CREATE TABLE logs (id INT,log_time DATETIME
) PARTITION BY RANGE (YEAR(log_time)) (PARTITION p2022 VALUES LESS THAN (2023),PARTITION p2023 VALUES LESS THAN (2024)
);
3. 冷热数据分离
- 热数据:最近3个月订单 → SSD存储
- 冷数据:历史订单 → HDD归档
三、⚙️ 配置调优示例
InnoDB 核心参数
innodb_buffer_pool_size = 70%内存 # 缓存池大小
innodb_flush_log_at_trx_commit = 2 # 平衡安全与性能
max_connections = 1000 # 根据实际调整
四、🛠️ 架构级优化
1. 读写分离
- 主库处理写操作
- 从库处理读查询
2. 缓存策略
import redis.clients.jedis.Jedis;public class UserService {private static final String REDIS_HOST = "localhost";private static final int REDIS_PORT = 6379;// 曼波小贴士:真实项目要用连接池哦!public User getUser(String userId) {try (Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT)) {// 1. 先查缓存String redisKey = "user:" + userId;String cachedData = jedis.get(redisKey);if (cachedData != null) {return JSON.parseObject(cachedData, User.class); // 使用JSON库反序列化}// 2. 缓存未命中则查数据库User user = jdbcTemplate.queryForObject("SELECT * FROM users WHERE id = ?", new Object[]{userId}, new UserRowMapper());// 3. 写入缓存(设置1小时过期)if (user != null) {jedis.setex(redisKey, 3600, JSON.toJSONString(user));}return user;}}
}
3. 分库分表
- 垂直分库:用户库、订单库分离
- 水平分表:user_001, user_002...
(✪▽✪)曼波~~ 记住优化要像中医把脉,先诊断(分析慢查询)再开方(针对性优化)!
如何定位慢查询?
一、🔍 基础定位三板斧
1. 慢查询日志捕获
-- 临时开启(重启失效)
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1; -- 超过1秒的查询
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';-- 永久生效配置(my.cnf)
[mysqld]
slow_query_log = 1
long_query_time = 1
log_queries_not_using_indexes = 1 -- 记录未走索引的查询
2. 日志分析神器
# 查看最耗时的10个慢查询
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log# 解析结果示例
Count: 5 Time=3.21s (16s) Lock=0.00s (0s) Rows=1000.0 (5000)SELECT * FROM orders WHERE user_id=N
3. 实时监控SHOW PROCESSLIST
-- 查看正在运行的查询
SHOW FULL PROCESSLIST;-- 重点关注:
State: "Sending data" -- 正在传输数据
Time: 大于100秒的查询 -- 可能卡住的查询
二、🔧 深度分析工具包
1. EXPLAIN 执行计划解读
EXPLAIN FORMAT=JSON
SELECT * FROM products
WHERE category='electronics'
ORDER BY price DESC;-- 关键指标:
"access_type": "ALL" -- 全表扫描(危险!)
"rows_examined_per_scan": 10000 -- 扫描行数
"using_filesort": true -- 文件排序(需优化)
2. Performance Schema 监控
-- 开启性能监控
UPDATE performance_schema.setup_instruments
SET ENABLED = 'YES'
WHERE NAME LIKE '%statement/%';-- 查询TOP SQL
SELECT DIGEST_TEXT, AVG_TIMER_WAIT
FROM performance_schema.events_statements_summary_by_digest
ORDER BY AVG_TIMER_WAIT DESC
LIMIT 10;
3. pt-query-digest 高级分析
# 使用Percona Toolkit
pt-query-digest /var/log/mysql/slow.log-- 输出包括:
# Rank 响应时间占比
# Attribute 各SQL指纹
# Exec time 执行时间统计
三、🚀 Java生态专用方案
1. Druid 连接池监控
// Spring Boot配置
@Bean
public ServletRegistrationBean<StatViewServlet> druidServlet() {return new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
}// 监控指标包括:
- SQL执行时间排行
- 慢SQL记录(支持配置阈值)
- 执行次数TOP SQL
2. MyBatis 打印慢SQL
<!-- mybatis-config.xml -->
<settings><setting name="defaultStatementTimeout" value="5"/> <!-- 超时5秒 -->
</settings><!-- 配合p6spy记录真实SQL -->
driverClassName=com.p6spy.engine.spy.P6SpyDriver
(✪▽✪)曼波~~ 定位到慢SQL后,记得用「EXPLAIN+SQL重写+索引优化」三连击哦!
相关文章:
MySQL面试01
MySQL 索引的最左原则 🍰 最左原则本质 ͟͟͞͞( •̀д•́) 想象复合索引是电话号码簿! 索引 (a,b,c) 的排列顺序: 先按a排序 → a相同按b排序 → 最后按c排序 生效场景三连: 1️⃣ WHERE a1 ✅ 2️⃣ WHERE a1 AND b2 ✅ 3️…...
webpack一篇
目录 一、构建工具 1.1简介 二、Webpack 2.1概念 2.2使用步骤 2.3配置文件(webpack.config.js) mode entry output loader plugin devtool 2.4开发服务器(webpack-dev-server) grunt/glup的对比 三、Vite 3.1概念 …...
健康饮食,健康早餐
营养早餐最好包含4大类食物:谷薯类;碳水;蛋白质;膳食纤维。 1.优质碳水 作用:提供持久的能量,避免血糖大幅波动等 例如:全麦面包、红薯🍠、玉米🌽、土豆🥔、…...
常见的排序算法 【复习笔记】
注意: 1. 后面的排序算法实现都只考虑升序,对于逆序,只有知道原理,实现很容易 2. 案例题: 题目描述:将读入的 N 个数从小到大输出 ( 1 < N <10e5) 输入描述:第一行一个正整数 N 第二行…...
【经验分享】Ubuntu20.04 vmware虚拟机存储空间越来越小问题(已解决)
【经验分享】Ubuntu20.04 vmware虚拟机存储空间越来越小问题(已解决) 前言一、问题分析二、解决方案 前言 我们在使用虚拟机过程中,经常会碰到即使删除了一些文件,但是存储空间还是越来越小的问题。今天我们来解决下这个问题。 一…...
Jenkins-自动化部署-通知
场景 使用jenkins部署,但有时不能立马部署,需要先通知相关人员,再部署,如果确实不能部署,可以留时间撤销。 方案 1.开始前我们添加,真正开始执行的等待时间;可供选择(Choice Param…...
Qt 文件操作+多线程+网络
文章目录 1. 文件操作1.1 API1.2 例子1,简单记事本1.3 例子2,输出文件的属性 2. Qt 多线程2.1 常用API2.2 例子1,自定义定时器 3. 线程安全3.1 互斥锁3.2 条件变量 4. 网络编程4.1 UDP Socket4.2 UDP Server4.3 UDP Client4.4 TCP Socket4.5 …...
《基于Hadoop的青岛市旅游景点游客行为分析系统设计与实现》开题报告
目录 一、选题依据 1.选题背景 2.国内外研究现状 (1)国内研究现状 (2)国外研究现状 3.发展趋势 4.应用价值 二、研究内容 1.学术构想与思路 2. 拟解决的关键问题 3. 拟采取的研究方法 4. 技术路线 (1)旅游前准备阶段 …...
pycharm debug卡住
pycharm debug时一直出现 collecting data, 然后点击下一行就卡住。 勾选 Gevent compatible解决 https://stackoverflow.com/questions/39371676/debugger-times-out-at-collecting-data...
MyBatis-Plus 元对象处理器 @TableField注解 反射动态赋值 实现字段自动填充
目录 🌰 举个直观例子 🛠️ 核心作用原理 📜 代码级工作流程 📜 完整代码 🔍 关键概念拆解 ⚠️ 常见问题排查 🌟 设计意义 🌰 举个直观例子 package work.dduo.ans.domain;import com.b…...
ISP 常见流程
1.sensor输出:一般为raw-OBpedestal。加pedestal避免减OB出现负值,同时保证信号超过ADC最小电压阈值,使信号落在ADC正常工作范围。 2. pedestal correction:移除sensor加的基底,确保后续处理信号起点正确。 3. Linea…...
Python Cookbook-2.27 从微软 Word 文档中抽取文本
任务 你想从 Windows 平台下某个目录树中的各个微软 Word 文件中抽取文本,并保存为对应的文本文件。 解决方案 借助 PyWin32 扩展,通过COM 机制,可以利用 Word 来完成转换: import fnmatch,os,sys,win32com.client wordapp w…...
java数据结构_Map和Set(一文理解哈希表)_9.3
目录 5. 哈希表 5.1 概念 5.2 冲突-概念 5.3 冲突-避免 5.4 冲突-避免-哈希函数的设计 5.5 冲突-避免-负载因子调节 5.6 冲突-解决 5.7 冲突-解决-闭散列 5.8 冲突-解决-开散列 / 哈希桶 5.9 冲突严重时的解决办法 5. 哈希表 5.1 概念 顺序结构以及平衡树中&#x…...
基于SpringBoot的“数据驱动的资产管理系统站”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“数据驱动的资产管理系统站”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统登录界…...
excel 斜向拆分单元格
右键-合并单元格 右键-设置单元格格式-边框 在设置好分割线后,你可以开始输入文字。 需要注意的是,文字并不会自动分成上下两行。 为了达到你期望的效果,你可以通过 同过左对齐、上对齐 空格键或使用【AltEnter】组合键来调整单元格中内容的…...
深入理解推理语言模型(RLM)
大语言模型从通用走向推理,万字长文解析推理语言模型,建议收藏后食用。 本文基于苏黎世联邦理工学院的论文《Reasoning Language Models: A Blueprint》进行整理,你将会了解到: 1、RLM的演进与基础:RLM融合LLM的知识广…...
2025年具有百度特色的软件测试面试题
百度业务场景 如何测试一个高并发的搜索系统(如百度搜索)?如何测试一个在线地图服务(如百度地图)?如何测试一个大型推荐系统(如百度推荐)的性能?百度技术栈 你对百度的 PaddlePaddle 框架有了解吗?如何测试基于 PaddlePaddle 的服务?如何测试百度云的 API 服务?你对…...
HOW - 在Windows浏览器中模拟MacOS的滚动条
目录 一、原生 CSS 代码实现模拟 macOS 滚动条额外优化应用到某个特定容器 二、使用第三方工具/扩展 如果你想让 Windows 里的滚动条 模拟 macOS 的效果(细窄、圆角、隐藏默认轨道)。 可以使用以下几种方案: 一、原生 CSS 代码实现 模拟 m…...
Lua | 每日一练 (5)
💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 Lua | 每日一练 (5)题目参考答案浅拷贝深拷贝使用场景…...
C# Unity 唐老狮 No.5 模拟面试题
本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: 全部 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体格式,…...
云原生事件驱动架构:构建实时响应的数字化神经系统
引言:重塑企业实时决策能力 Uber实现事件驱动架构升级后,实时供需匹配延迟降至8ms,动态定价策略响应速度提升1200倍。Netflix通过事件流处理实现个性化推荐,用户点击率提高34%,事件处理吞吐量达2000万/秒。Confluent基…...
Metasploit multi/handler 模块高级选项解析
multi/handler 是 Metasploit 框架中至关重要的模块,主要用于监听目标机的连接并处理来自目标的反向 shell 或会话。它可以灵活地适应不同渗透测试场景,提供高度的自定义选项以优化监听器的行为。 在 Metasploit msf6 框架中,当使用 exploit…...
WPF高级 | WPF 应用程序部署与发布:确保顺利交付到用户手中
WPF高级 | WPF 应用程序部署与发布:确保顺利交付到用户手中 一、前言二、部署与发布基础概念2.1 部署的定义与目的2.2 发布的方式与渠道2.3 部署与发布的关键要素 三、WPF 应用程序打包3.1 使用 Visual Studio 自带的打包工具3.2 使用第三方打包工具 四、发布到不同…...
Spring MVC 程序开发(1)
目录 1、什么是 SpringMVC2、返回数据2.1、返回 JSON 对象2.2、请求转发2.3、请求重定向2.4、自定义返回的内容 1、什么是 SpringMVC 1、Tomcat 和 Servlet 分别是什么?有什么关系? Servlet 是 java 官方定义的 web 开发的标准规范;Tomcat 是…...
JavaWeb后端基础(6)
主键返回 例子: /** * 新增员工数据 */ Options(useGeneratedKeys true, keyProperty "id") Insert("insert into emp(username, name, gender, phone, job, salary, image, entry_date, dept_id, create_time, update_time) " "value…...
C# Unity 唐老狮 No.4 模拟面试题
本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: 全部 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体格式,…...
集群、分布式与微服务架构 区别
集群、分布式与微服务架构:概念解析与核心差异 在构建现代软件系统时,集群架构、分布式系统和微服务架构是三种常见的技术方案。它们常被混淆,但各自解决的问题、设计理念和应用场景截然不同。本文将从基础概念出发,深入分析三者…...
Protocol Buffers在MCU上的nanopb介绍及使用详解
在嵌入式系统和资源受限的环境中,传统的Protocol Buffers 可能显得过于庞大。因此,nanopb 应运而生,它是一个轻量级的 Protocol Buffers 生成器,专为嵌入式系统设计c语言设计。本文将介绍如何安装和使用 nanopb,以及通…...
【Elasticsearch】自定义内置的索引生命周期管理(ILM)策略。
以下是对 Elasticsearch 官方教程《Customize built-in ILM policies》的详细解读,结合原文内容,帮助您更好地理解如何自定义内置的索引生命周期管理(ILM)策略。 --- Elasticsearch 教程:自定义内置 ILM 策略 1.背景…...
测试工程师Ai应用实战指南简例prompt
以下是一个真实具体的案例,展示测试工程师如何在不同阶段结合DeepSeek提升效率。案例基于电商平台"订单超时自动关闭"功能测试: 案例背景 项目名称:电商平台订单系统V2.3 测试目标:验证"用户下单后30分钟未支付,订单自动关闭并释放库存"功能 技术栈:…...
