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

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 索引的最左原则 &#x1f370; 最左原则本质 ͟͟͞͞( •̀д•́) 想象复合索引是电话号码簿&#xff01; 索引 (a,b,c) 的排列顺序&#xff1a; 先按a排序 → a相同按b排序 → 最后按c排序 生效场景三连&#xff1a; 1️⃣ WHERE a1 ✅ 2️⃣ WHERE a1 AND b2 ✅ 3️…...

webpack一篇

目录 一、构建工具 1.1简介 二、Webpack 2.1概念 2.2使用步骤 2.3配置文件&#xff08;webpack.config.js&#xff09; mode entry output loader plugin devtool 2.4开发服务器&#xff08;webpack-dev-server&#xff09; grunt/glup的对比 三、Vite 3.1概念 …...

健康饮食,健康早餐

营养早餐最好包含4大类食物&#xff1a;谷薯类&#xff1b;碳水&#xff1b;蛋白质&#xff1b;膳食纤维。 1.优质碳水 作用&#xff1a;提供持久的能量&#xff0c;避免血糖大幅波动等 例如&#xff1a;全麦面包、红薯&#x1f360;、玉米&#x1f33d;、土豆&#x1f954;、…...

常见的排序算法 【复习笔记】

注意&#xff1a; 1. 后面的排序算法实现都只考虑升序&#xff0c;对于逆序&#xff0c;只有知道原理&#xff0c;实现很容易 2. 案例题&#xff1a; 题目描述&#xff1a;将读入的 N 个数从小到大输出 ( 1 < N <10e5) 输入描述&#xff1a;第一行一个正整数 N 第二行…...

【经验分享】Ubuntu20.04 vmware虚拟机存储空间越来越小问题(已解决)

【经验分享】Ubuntu20.04 vmware虚拟机存储空间越来越小问题&#xff08;已解决&#xff09; 前言一、问题分析二、解决方案 前言 我们在使用虚拟机过程中&#xff0c;经常会碰到即使删除了一些文件&#xff0c;但是存储空间还是越来越小的问题。今天我们来解决下这个问题。 一…...

Jenkins-自动化部署-通知

场景 使用jenkins部署&#xff0c;但有时不能立马部署&#xff0c;需要先通知相关人员&#xff0c;再部署&#xff0c;如果确实不能部署&#xff0c;可以留时间撤销。 方案 1.开始前我们添加&#xff0c;真正开始执行的等待时间&#xff1b;可供选择&#xff08;Choice Param…...

Qt 文件操作+多线程+网络

文章目录 1. 文件操作1.1 API1.2 例子1&#xff0c;简单记事本1.3 例子2&#xff0c;输出文件的属性 2. Qt 多线程2.1 常用API2.2 例子1&#xff0c;自定义定时器 3. 线程安全3.1 互斥锁3.2 条件变量 4. 网络编程4.1 UDP Socket4.2 UDP Server4.3 UDP Client4.4 TCP Socket4.5 …...

《基于Hadoop的青岛市旅游景点游客行为分析系统设计与实现》开题报告

目录 一、选题依据 1.选题背景 2.国内外研究现状 &#xff08;1&#xff09;国内研究现状 &#xff08;2&#xff09;国外研究现状 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注解 反射动态赋值 实现字段自动填充

目录 &#x1f330; 举个直观例子 &#x1f6e0;️ 核心作用原理 &#x1f4dc; 代码级工作流程 &#x1f4dc; 完整代码 &#x1f50d; 关键概念拆解 ⚠️ 常见问题排查 &#x1f31f; 设计意义 &#x1f330; 举个直观例子 package work.dduo.ans.domain;import com.b…...

ISP 常见流程

1.sensor输出&#xff1a;一般为raw-OBpedestal。加pedestal避免减OB出现负值&#xff0c;同时保证信号超过ADC最小电压阈值&#xff0c;使信号落在ADC正常工作范围。 2. pedestal correction&#xff1a;移除sensor加的基底&#xff0c;确保后续处理信号起点正确。 3. Linea…...

Python Cookbook-2.27 从微软 Word 文档中抽取文本

任务 你想从 Windows 平台下某个目录树中的各个微软 Word 文件中抽取文本&#xff0c;并保存为对应的文本文件。 解决方案 借助 PyWin32 扩展&#xff0c;通过COM 机制&#xff0c;可以利用 Word 来完成转换: import fnmatch,os,sys&#xff0c;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的“数据驱动的资产管理系统站”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统登录界…...

excel 斜向拆分单元格

右键-合并单元格 右键-设置单元格格式-边框 在设置好分割线后&#xff0c;你可以开始输入文字。 需要注意的是&#xff0c;文字并不会自动分成上下两行。 为了达到你期望的效果&#xff0c;你可以通过 同过左对齐、上对齐 空格键或使用【AltEnter】组合键来调整单元格中内容的…...

深入理解推理语言模型(RLM)

大语言模型从通用走向推理&#xff0c;万字长文解析推理语言模型&#xff0c;建议收藏后食用。 本文基于苏黎世联邦理工学院的论文《Reasoning Language Models: A Blueprint》进行整理&#xff0c;你将会了解到&#xff1a; 1、RLM的演进与基础&#xff1a;RLM融合LLM的知识广…...

2025年具有百度特色的软件测试面试题

百度业务场景 如何测试一个高并发的搜索系统(如百度搜索)?如何测试一个在线地图服务(如百度地图)?如何测试一个大型推荐系统(如百度推荐)的性能?百度技术栈 你对百度的 PaddlePaddle 框架有了解吗?如何测试基于 PaddlePaddle 的服务?如何测试百度云的 API 服务?你对…...

HOW - 在Windows浏览器中模拟MacOS的滚动条

目录 一、原生 CSS 代码实现模拟 macOS 滚动条额外优化应用到某个特定容器 二、使用第三方工具/扩展 如果你想让 Windows 里的滚动条 模拟 macOS 的效果&#xff08;细窄、圆角、隐藏默认轨道&#xff09;。 可以使用以下几种方案&#xff1a; 一、原生 CSS 代码实现 模拟 m…...

Lua | 每日一练 (5)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 Lua | 每日一练 (5)题目参考答案浅拷贝深拷贝使用场景…...

C# Unity 唐老狮 No.5 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: 全部 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体格式,…...

云原生事件驱动架构:构建实时响应的数字化神经系统

引言&#xff1a;重塑企业实时决策能力 Uber实现事件驱动架构升级后&#xff0c;实时供需匹配延迟降至8ms&#xff0c;动态定价策略响应速度提升1200倍。Netflix通过事件流处理实现个性化推荐&#xff0c;用户点击率提高34%&#xff0c;事件处理吞吐量达2000万/秒。Confluent基…...

Metasploit multi/handler 模块高级选项解析

multi/handler 是 Metasploit 框架中至关重要的模块&#xff0c;主要用于监听目标机的连接并处理来自目标的反向 shell 或会话。它可以灵活地适应不同渗透测试场景&#xff0c;提供高度的自定义选项以优化监听器的行为。 在 Metasploit msf6 框架中&#xff0c;当使用 exploit…...

WPF高级 | WPF 应用程序部署与发布:确保顺利交付到用户手中

WPF高级 | WPF 应用程序部署与发布&#xff1a;确保顺利交付到用户手中 一、前言二、部署与发布基础概念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 分别是什么&#xff1f;有什么关系&#xff1f; Servlet 是 java 官方定义的 web 开发的标准规范&#xff1b;Tomcat 是…...

JavaWeb后端基础(6)

主键返回 例子&#xff1a; /** * 新增员工数据 */ 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 如果你发现了文章内特殊的字体格式,…...

集群、分布式与微服务架构 区别

集群、分布式与微服务架构&#xff1a;概念解析与核心差异 在构建现代软件系统时&#xff0c;集群架构、分布式系统和微服务架构是三种常见的技术方案。它们常被混淆&#xff0c;但各自解决的问题、设计理念和应用场景截然不同。本文将从基础概念出发&#xff0c;深入分析三者…...

Protocol Buffers在MCU上的nanopb介绍及使用详解

在嵌入式系统和资源受限的环境中&#xff0c;传统的Protocol Buffers 可能显得过于庞大。因此&#xff0c;nanopb 应运而生&#xff0c;它是一个轻量级的 Protocol Buffers 生成器&#xff0c;专为嵌入式系统设计c语言设计。本文将介绍如何安装和使用 nanopb&#xff0c;以及通…...

【Elasticsearch】自定义内置的索引生命周期管理(ILM)策略。

以下是对 Elasticsearch 官方教程《Customize built-in ILM policies》的详细解读&#xff0c;结合原文内容&#xff0c;帮助您更好地理解如何自定义内置的索引生命周期管理&#xff08;ILM&#xff09;策略。 --- Elasticsearch 教程&#xff1a;自定义内置 ILM 策略 1.背景…...

测试工程师Ai应用实战指南简例prompt

以下是一个真实具体的案例,展示测试工程师如何在不同阶段结合DeepSeek提升效率。案例基于电商平台"订单超时自动关闭"功能测试: 案例背景 项目名称:电商平台订单系统V2.3 测试目标:验证"用户下单后30分钟未支付,订单自动关闭并释放库存"功能 技术栈:…...