MySQL 进阶学习文档

一、存储引擎

1.1 核心架构

  • 四层架构:连接层 → 服务层 → 引擎层 → 存储层
  • 插件式存储引擎:不同引擎独立管理数据存储,可动态选择

1.2 主流引擎对比

特性InnoDB(默认)MyISAMMemory
事务支持✅ 支持❌ 不支持❌ 不支持
锁粒度行锁表锁表锁
外键支持✅ 支持❌ 不支持❌ 不支持
存储位置磁盘磁盘内存
适用场景高并发事务读多写少临时数据缓存

选择建议

  • 优先选 InnoDB(支持事务和外键)
  • 读多写少且无需事务选 MyISAM
  • 临时数据用 Memory

二、索引优化

2.1 索引原理

  • B + 树结构
    • 叶子节点存储完整数据(聚集索引)
    • 非叶子节点仅存储索引值和指针
  • Hash 索引
    • 快速等值查询(WHERE name='xxx'
    • 不支持范围查询(BETWEEN...

2.2 索引类型

类型说明示例
主键索引唯一标识记录(自动创建)PRIMARY KEY (id)
唯一索引保证值唯一UNIQUE KEY (email)
组合索引多字段联合索引INDEX idx_name_age (name, age)
全文索引文本关键词搜索FULLTEXT INDEX (content)
索引类型唯一性字段类型适用场景
主键索引强制唯一整数、UUID 等表的唯一标识
唯一索引唯一邮箱、手机号等确保字段值不重复
常规索引非唯一常用查询字段加速WHEREORDER BY
全文索引非唯一文本类型关键词搜索(如文章内容)

为什么需要不同索引?

  • 主键索引:确保数据唯一性,加速数据定位。
  • 唯一索引:约束业务规则(如邮箱不能重复)。
  • 常规索引:提升查询效率,减少全表扫描。
  • 全文索引:支持复杂文本搜索(如LIKE '%关键词%'的优化)

2.3 索引优化策略

  1. 最左前缀原则:组合索引需按顺序使用最左字段

    -- 有效
    SELECT * FROM users WHERE name='Tom' AND age=20;
    -- 无效(跳过age)
    SELECT * FROM users WHERE name='Tom' AND gender='M';
    
  2. 避免索引失效

    • 不要在索引列上做运算(WHERE age+1=20
    • 字符串不加引号(WHERE phone=13812345678
    • 模糊查询前导 %(WHERE name LIKE '%Tom'
  3. 覆盖索引:查询字段全部包含在索引中

    CREATE INDEX idx_user_info ON users(name, age, email);
    SELECT name, age FROM users WHERE email='tom@example.com';
    

三、SQL 性能优化

3.1 执行计划分析

使用EXPLAIN分析查询性能:

EXPLAIN SELECT * FROM orders WHERE status=1;

关键指标解读:

  • type: 连接类型(ref优于range优于all
  • key: 实际使用的索引
  • rows: 预估扫描行数
  • ExtraUsing index表示覆盖索引

3.2 分页优化

问题LIMIT 100000,10性能差
优化

-- 基于覆盖索引
SELECT * FROM orders 
WHERE id > (SELECT id FROM orders LIMIT 100000,1)
LIMIT 10;

3.3 锁优化

  • 行锁:InnoDB 默认使用行锁(基于索引)
  • 表锁:MyISAM 使用表锁,适合低并发场景
  • 意向锁:InnoDB 通过意向锁减少锁冲突

四、事务与隔离级别

4.1 事务特性(ACID)

  • 原子性:通过undo log实现回滚
  • 一致性:事务前后数据状态一致
  • 隔离性:通过锁和 MVCC 实现
  • 持久性:通过redo log保证数据持久化

4.2 隔离级别对比

隔离级别脏读不可重复读幻读实现方式
Read Uncommitted无锁
Read Committed行锁
Repeatable ReadMVCC + 行锁
Serializable全表锁

推荐:默认使用Repeatable Read,兼顾一致性和性能

五、高级功能

5.1 视图

作用:简化复杂查询,提高安全性

CREATE VIEW v_user_info AS
SELECT id, name, email FROM users WHERE status=1;

5.2 存储过程

示例:计算员工平均薪资

DELIMITER $$
CREATE PROCEDURE GetAvgSalary()
BEGINSELECT AVG(salary) AS avg_salary FROM employees;
END$$
DELIMITER ;

5.3 触发器

示例:记录用户操作日志

CREATE TRIGGER log_user_operation
AFTER UPDATE ON users
FOR EACH ROW
INSERT INTO user_logs(user_id, operation, timestamp)
VALUES(OLD.id, 'update', NOW());

六、InnoDB 引擎深度解析

6.1 核心组件

  • Buffer Pool:缓存数据页和索引页
  • Change Buffer:优化非唯一索引的写操作
  • Redo Log:保证事务持久性
  • Undo Log:支持回滚和 MVCC

6.2 MVCC 原理

  • 版本链:通过DB_TRX_IDDB_ROLL_PTR实现多版本控制
  • ReadView:记录活跃事务 ID,决定可见性规则

七、管理工具

7.1 备份恢复

全库备份

mysqldump -uroot -p --all-databases > full_backup.sql

恢复数据

mysql -uroot -p < full_backup.sql

7.2 性能监控

-- 查看慢查询日志
SHOW VARIABLES LIKE 'slow_query_log';-- 查看索引使用情况
SELECT index_name, rows_read, rows_index_first 
FROM information_schema.table_statistics 
WHERE table_schema='your_db';

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

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

相关文章

jmeter将返回的数据写入csv文件

举例说明&#xff0c;我需要接口返回体中的exampleid与todoid的数据信息&#xff08;使用边界提取器先将其提取&#xff09;&#xff0c;并将其写入csv文件进行保存 使用后置处理器BeanShell 脚本实例如下 import java.io.*;// 设置要写入的文件路径 String filePath "…

在线教育网站项目第四步:deepseek骗我, WSL2不能创建两个独立的Ubuntu,但我们能实现实例互访及外部访问

一、说明 上一章折腾了半天&#xff0c;搞出不少问题&#xff0c;今天我们在deepseek的帮助下&#xff0c;完成多个独立ubuntu24.04实例的安装&#xff0c;并完成固定ip&#xff0c;实践证明&#xff0c;deepseek不靠谱&#xff0c;浪费我2个小时时间&#xff0c;我们将在下面实…

Apache Paimon 在抖音集团多场景中的优化实践

资料来源&#xff1a;火山引擎-开发者社区 本文将基于抖音集团内部两大业务的典型实时数仓场景&#xff0c;介绍Paimon在抖音集团内部的生产实践。 作者&#xff1a;李明、苏兴、文杰 抖音集团大数据工程师 目前抖音集团内部主要使用 Lambda 架构进行实时数仓建设&#xff0c;其…

PDF Reader Pro for Mac v4.9.0 PDF编辑/批注/OCR/转换工具 支持M、Intel芯片

PDF Reader Pro 是一款用户必备的集管理、编辑、转换、阅读功能于一体的专业的全能PDF阅读专家。快速、易用、强大&#xff0c;让您出色完成 PDF 工作。 应用介绍 PDF Reader Pro&#xff0c;一款功能齐全且强大的PDF阅读和编辑软件。支持PDF阅读、批注、PDF编辑、PDF格式转换…

HTML5与CSS3新特性详解

一、HTML5新特性 1.概述 HTML5 的新增特性主要是针对于以前的不足&#xff0c;增加了一些新的标签、新的表单和新的表单属性等。 这些新特性都有兼容性问题&#xff0c;基本是 IE9 以上版本的浏览器才支持&#xff0c;如果不考虑兼容性问题&#xff0c;可以大量使用这些新特…

shell 脚本搭建apache

#!/bin/bash # Set Apache version to install ## author: yuan# 检查外网连接 echo "检查外网连接..." ping www.baidu.com -c 3 > /dev/null 2>&1 if [ $? -eq 0 ]; thenecho "外网通讯良好&#xff01;" elseecho "网络连接失败&#x…

Linux环境使用jmeter做性能测试

一、安装JDK&#xff0c;版本jdk1.8 1、下载压缩包到/jdk目录下解压 cd /jdk tar -zxvf jdk-8u241-linux-64.tar.gz 2、配置环境变量 在profile文件中末尾新增信息如下所示 vim /etc/profile export JAVA_HOME/usr/local/java/jdk/jdk1.8.0_221 export PATH$PATH:$JAVA_HOM…

巧用符号链接搬移C盘中的软件数据目录到其他盘

#工作记录 我们知道&#xff0c;在Windows11系统&#xff0c;有些软件是不能指定安装目录的&#xff0c;有些软件即使指定了安装目录可是在更新版本之后还是会安装到默认的C盘目录中&#xff08;比如剪映&#xff09;&#xff0c;而且每次安装某些软件之后&#xff0c;这些软件…

Mysql的安装配置

目录 MySQL 简介 MySQL 的下载安装 mysql配置【默认以及下载好】 &#xff08;1&#xff09;配置环境变量 &#xff08;2&#xff09;修改配置文件 &#xff08;3&#xff09;以管理员身份运行cmd&#xff08;一定要用管理员身份运行&#xff0c;不然权限不够&#xff09; …

登山第二十梯:无人机实时自主探索——我是一只小小小鸟

文章目录 一 摘要 二 资源 三 内容 一 摘要 自主探索是无人机 &#xff08;UAV&#xff09; 各种应用的基本问题。最近&#xff0c;基于 LiDAR 的探索因其能够生成大规模环境的高精度点云地图而受到广泛关注。虽然点云本身就为导航提供了信息&#xff0c;但许多现有的勘探方…

基于FPGA轨道交通6U机箱CPCI脉冲板板卡

板卡简介&#xff1a; 本板为脉冲板&#xff0c;脉冲板主要执行CPU下达的指令&#xff0c;通过实现各种控制算法来调节PWM&#xff0c;然后输出光纤PWM信号来驱动变频器功率模块以达到控制电机的目的。 性能规格&#xff1a; 电源&#xff1a;DC5V&#xff1b;15V FPGA&…

一键批量txt转DWG,DWG转txt——插件实现 CAD c#二次开发

如下图&#xff0c;我们有大量dwg需要转为txt格式&#xff0c;或txt格式坐标需要转为dwg格式&#xff0c;此插件可一键完成一个文件夹下所有文件的转换。 插件使用方式 命令行输入&#xff1a; netload 加载此dll插件&#xff0c; 输入&#xff1a; dwg2txt 可将dwg转为t…

【Unity基础】Unity中角色动画的三种实现方式

在Unity中&#xff0c;角色动画有三种不同的实现方式&#xff1a;逐帧动画&#xff08;Frame-by-Frame&#xff09;、剪裁动画&#xff08;Cutout&#xff09;和骨骼动画&#xff08;Skeletal&#xff09;&#xff0c;各自适用于不同的场景和需求。以下是它们的核心区别及特点&…

Flutter中Align的使用说明

又失业了&#xff0c;作为一个高龄Android程序员今年找工作真难呀。现在Flutter是必需技能了&#xff0c;所以最近在自学。所用书籍叫《Flutter实战》&#xff0c;如下 如今已看了100多页&#xff0c;发现这本书写得……有点赶吧&#xff0c;好几处讲得不清不楚&#xff0c;而关…

leetcode hot100(五)

11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你…

echarts+Vue2 自动轮播饼图

1、首先下载echarts&#xff0c;并且全局引入echarts 方法&#xff1a;从 npm 安装 npm install echarts 在 main.js 文件中全局引入 然后创建一个vue文件&#xff0c;名字随便起&#xff0c;比如 pieChart.vue&#xff0c;话不多说&#xff0c;直接上才艺&#xff1a;&…

自学软硬件第755 docker容器虚拟化技术

见字如面&#xff0c; 这里是AIGC创意人_竹相左边&#xff0c; 正在通过AI自学软硬件工程师&#xff0c;目标手搓可回收火箭玩具。 我很喜欢 《流浪地球 2》中 &#xff0c;马兆&#xff1a;没有硬件支撑&#xff0c;你破解个屁。 写作背景 今天在剪视频&#xff0c;然后看…

单片机自学总结

自从工作以来&#xff0c;一直努力耕耘单片机&#xff0c;至今&#xff0c;颇有收获。从51单片机&#xff0c;PIC单片机&#xff0c;直到STM32&#xff0c;以及RTOS和Linux&#xff0c;几乎天天在搞:51单片机&#xff0c;STM8S207单片机&#xff0c;PY32F003单片机&#xff0c;…

模拟String基本函数/深浅拷贝/柔性数组

1.首先我们先关注一下ASCII&#xff1a; 记住常用每一个字符对应的ascii码值&#xff01; 2.string函数的相关操作函数代码&#xff1a; 大多数小疑问都已经写在注释里面&#xff01; #pragma once #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<a…

论文分享:PL-ALF框架实现无人机低纹理环境自主飞行

在室内仓库、地下隧道等低纹理复杂场景中&#xff0c;无人机依赖视觉传感器进行自主飞行时&#xff0c;往往会遇到定位精度低、路径规划不稳定等难题。针对这一问题&#xff0c;重庆邮电大学计算机学院雷大江教授团队在IEEE Trans期刊上提出了一种新型自主飞行框架&#xff1a;…