• MySQL内幕揭秘:探索MySQL调优指南,解锁MySQL的强大功能

MySQL内幕揭秘:探索MySQL调优指南,解锁MySQL的强大功能

2025-08-16 12:33:15 栏目:宝塔面板 50 阅读

1、MySQL大事记

图片

1994年:Michael Widenius和David Axmark创建了MySQL AB。1995年:MySQL从最初的beta版本发布,成为一款开源软件。1997年:MySQL发行版本3.21,并成为了第一个支持多个存储引擎的数据库管理系统。2000年:MySQL AB成立了美国分部,开始在美国市场推广MySQL。2003年:MySQL AB发行了版本4.0,包括一些新功能,如子查询、视图和存储过程等。2005年:Sun Microsystems收购了MySQL AB,MySQL开始进入商业化阶段。2008年:MySQL 5.1发布,引入了一些新的特性,如事件调度器和复制增量流等。2010年:Oracle收购Sun Microsystems,也就接管了MySQL。2012年:MySQL 5.6发布,带来了全文搜索、NoSQL接口和多线程复制等新特性。2013年:MySQL 5.7发布,加入了JSON数据类型、有效地调整排序缓存和更好的性能优化等。2018年:MySQL 8.0发布,提供窗口函数、变量范围和原生支持多种数据类型等新特性。

2、MySQL使用在哪些大平台或企业

1)谷歌:谷歌广泛使用MySQL作为其后端数据库,支持数百万个查询请求。

2)Facebook:Facebook在早期就采用了MySQL,并开发了InnoDB存储引擎,使MySQL能够处理更高级别的负载。

3)Twitter:Twitter在其基础架构中使用MySQL,以存储和处理海量的社交数据。

4)美团:美团是一个中国本土的O2O平台,使用MySQL来管理其订单、餐厅、优惠券等数据。

5)阿里巴巴:阿里巴巴也是MySQL的重要用户之一,它将MySQL用于淘宝、支付宝和阿里云等核心业务。

6)百度:百度广泛使用MySQL来管理其各种应用程序和服务,如搜索、地图、音乐等。

3、MySql调优

3.1、MySQL调优维度

图片

1)SQL及索引优化:SQL查询语句的优化是提高MySQL性能的关键。优化查询语句可以采用各种方法,如使用合适的索引、避免在WHERE子句中使用函数操作符、减少子查询等。

2)表结构优化:表的设计和结构也会影响MySQL的性能。适当的表设计可以提高查询性能和数据处理速度。例如,使用分区表可以加速查询,而垂直拆分表可以降低数据库的负载。

3)系统配置优化:MySQL及服务器的参数设置对于性能也非常重要。调整配置可以让MySQL更好地利用硬件资源。例如,增加缓存区大小、调整连接超时时间或者优化排序缓存等都可以提高系统性能。

4)硬件优化:除了软件方面的优化,还可以通过硬件来优化MySQL性能。例如,使用更快的磁盘、增加内存以及升级CPU等都可以提高MySQL的负载能力。

3.2、MySQL调优分解

图片

4、具体说明

4.1、SQL语句优化

  • 开启慢查询功能
vim/etc/my.cnf
[mysqld]
slow-query-log=on# 开启慢查询功能
slow_query_log_file=/data/slow-query.log# 慢查询日志存放路径与名称
long_query_time=5# 查询时间超过5s的查询语句
log-queries-not-using-indexes=on# 列出没有使用索引的查询语句

1)查看所有日志状态: show variables like '%quer%';

2)查看慢查询状态:show variables like 'show%'

  • 分析SQL语句

MySql内部函数explain(查询sql的执行计划),explain返回各列的含义

table:显示这一行的数据是关于哪张表的
type:这是重要的列,显示连接使用了何种类型。
从最好到最差的连接类型为const、eq_reg、ref、range、index 和ALL
possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。
key:实际使用的索引。如果为NULL,则没有使用索引。
keyjen:使用的索引的长度。在不损失精确性的情况下,长度越短越好
ref:显示索引的哪一列被使用了,如果可能的话,是一个常数
rows: MySQL估算需要读取的行数

rows: MySQL估算需要读取的行数

  • 子查询优化

子查询尽量不用或改成join

  • group by 优化

group by 尽量使用索引字段

  • limit 优化

给查询语句增加limit

4.2、索引优化

  • 重复索引
  • 冗余索引
  • 检查重复及冗余索引的工具
  • 删除不用的索引

4.3、数据库结构优化

  • 选择合适的数据类型
  • 表的范式化
  • 表的反范式化的使用
  • 表的垂直拆分(列拆分)
  • 表的水行拆分(行拆分)

4.4、配置优化

  • 操作系统配置

1)缓存池大小

2)打开文件限制

  • MySQL配置

1)innodb缓冲池内存占用大小

2)innodb_buffer_pool_instances 缓冲池个数

3)innodb_log_buffer_size 缓冲的大小

4)innodb IO配置

4.5、服务器硬件优化

  • CPU 多核
  • 硬盘 raid0 raid1 raid5增加硬盘IO速度

5、数据库调优步骤

图片

6、MySql相关问题

1)InnoDB myisam区别

  • innodb支持事务、myisam不支持事务
  • innodb不支持全文索引、myisam支持全文索引,查询性能较快
  • innodb行级锁、myisam表级锁

2)怎么处理MySQL的慢查询?

开启慢查询->explain分析SQL->横纵向分表

3)Myisam和Innodb的区别?

图片

4)Mysql中索引类型有哪些?

  • 普通索引:允许被索引的数据列包含重复的值
  • 唯一索引:可以保证数据记录的唯一性
  • 主键索引:是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字primary key来创建
  • 全文索引:通过建立倒排索引,可以极大的提升检索效率,解决判断字段是否包含的问题,是目前搜索引擎使用的一种关键技术索引可以极大地提高数据的查询速度

5)为什么用自增主键

数据库使用的是B+Tree,非自增会出现要插入到节点与节点中间,会发生节点分裂。

6)为什么用联合索引

减少开销。建一个联合索引(col1,col2,col3),实际相当于建了(col1),(col1,col2),(col1,col2,col3)三个索引。

本文地址:https://www.yitenyun.com/337.html

搜索文章

Tags

数据库 API FastAPI Calcite 电商系统 MySQL Web 应用 异步数据库 数据同步 ACK 双主架构 循环复制 TIME_WAIT 运维 负载均衡 JumpServer SSL 堡垒机 跳板机 HTTPS JumpServer安装 堡垒机安装 Linux安装JumpServer Deepseek 宝塔面板 Linux宝塔 Docker 生命周期 esxi esxi6 root密码不对 无法登录 web无法登录 HexHub 序列 核心机制 Windows Windows server net3.5 .NET 安装出错 服务器 管理口 HTTPS加密 宝塔面板打不开 宝塔面板无法访问 查看硬件 Linux查看硬件 Linux查看CPU Linux查看内存 Windows宝塔 Mysql重置密码 Oracle 处理机制 InnoDB 数据库锁 无法访问宝塔面板 开源 PostgreSQL 存储引擎 监控 连接控制 机制 Serverless 无服务器 语言 ES 协同 技术 服务器性能 Spring Redis 异步化 分页查询 索引 缓存方案 缓存架构 缓存穿透 高可用 group by Undo Log GreatSQL 连接数 SQL 动态查询 机器学习 日志文件 MIXED 3 响应模型 R2DBC SVM Embedding 优化 万能公式 R edis 线程 数据 主库 RocketMQ 长轮询 配置 自定义序列化 Netstat Linux 服务器 端口 Linux 安全 ​Redis 推荐模型 Postgres OTel Iceberg 工具 云原生 scp Linux的scp怎么用 scp上传 scp下载 scp命令 AI 助手 SQLark 向量数据库 大模型 共享锁 PG DBA openHalo 存储 SQLite-Web SQLite 数据库管理工具 Hash 字段 Recursive OB 单机版 查询 电商 系统 Ftp 架构 流量 Rsync 锁机制 • 索引 • 数据库 修改DNS Centos7如何修改DNS redo log 重做日志 数据分类 加密 磁盘架构 人工智能 推荐系统 场景 聚簇 非聚簇 sftp 服务器 参数 向量库 Milvus 线上 库存 预扣 业务 同城 双活 信息化 智能运维 MySQL 9.3 防火墙 黑客 Doris SeaTunnel MVCC Python 高效统计 今天这篇文章就跟大家 不宕机 数据备份 传统数据库 向量化 缓存 mini-redis INCR指令 网络架构 网络配置 INSERT COMPACT 分库 分表 窗口 函数 Redisson 锁芯 RDB AOF prometheus Alert PostGIS 启动故障 事务 Java 开发 Canal Web IT运维 崖山 新版本 filelock MongoDB 数据结构 ZODB 核心架构 订阅机制 引擎 性能 数据脱敏 加密算法 B+Tree ID 字段 分布式 集中式 Go 数据库迁移 读写 容器 数据类型 虚拟服务器 虚拟机 内存 Redis 8.0 容器化 网络故障 DBMS 管理系统 频繁 Codis 模型 OAuth2 Token JOIN 微软 SQL Server AI功能 QPS 高并发 工具链 国产数据库 发件箱模式 自动重启 Pottery 聚簇索引 非聚簇索引 原子性 部署 Entity Testcloud 云端自动化 速度 服务器中毒 事务隔离 SpringAI 排行榜 排序 SSH Caffeine CP Web 接口 分页方案 排版 数据集成工具 MCP 开放协议 行业 趋势 数据页 悲观锁 乐观锁 StarRocks 数据仓库 Redka 大表 业务场景 sqlmock LRU 分页 AIOPS 分布式架构 分布式锁​ 1 优化器 池化技术 连接池 单点故障 仪表盘 网络 dbt 数据转换工具 Order EasyExcel MySQL8 意向锁 记录锁 事务同步 InfluxDB 日志 IT 对象 字典 RAG HelixDB 双引擎 播客 订单 单线程 主从复制 代理 Crash 代码 编程 UUIDv7 主键 UUID ID Ansible LLM 语句 Pump 恢复数据 Valkey Valkey8.0 ReadView 产业链 兼容性 数据字典 线程安全 List 类型 MGR 分布式集群 失效 Weaviate 解锁 调优 Next-Key 表空间 分布式锁 Zookeeper 关系数据库 慢SQL优化 RR 互联网 GitHub Git 矢量存储 数据库类型 AI代理 国产 用户 查询规划 算法 快照读 当前读 视图 千万级 count(*) count(主键) 行数 神经系统 技巧 CAS 并发控制 恢复机制 拦截器 动态代理 多线程 闪回