mysql笔记:11. 性能优化
文章目录
- 概览
- 查询速度优化
- 1. 分析查询语句
- 1.1 EXPLAIN
- 1.2 DESCRIBE
- 2. 使用索引优化查询
- 3. 优化子查询
- 数据库结构优化
- 1. 分解表
- 2. 建立中间表
- 3. 增加冗余字段
- 4. 优化插入速度
- 4.1. MyISAM引擎表
- 4.2. InnoDB引擎表
- 5. 分析表、检查表和优化表
- 5.1. 分析表
- 5.2. 检查表
- 5.3. 优化表
- MySQL服务器的优化
- 1. 服务器硬件优化
- 2. MySQL参数优化
性能优化是通过合理安排资源,调整系统参数使MySQL运行更快、更节省资源。主要包括查询速度优化、更新速度优化、MySQL服务器优化等。
概览
MySQL数据库优化是多方面的,原则上是减少系统的瓶颈和资源的占用、增加系统的反应速度。
MySQL常用的性能参数值如下表:
| 参数名 | 功能 |
|---|---|
| connections | 连接服务器的次数 |
| uptime | 服务器的上线时间 |
| slow_queries | 慢查询的次数 |
| com_select | 查询操作的次数 |
| com_insert | 插入操作的次数 |
| com_update | 更新操作的次数 |
| com_delete | 删除操作的次数 |
查询命令语法:
mysql> show status like 'NAME';
查询速度优化
在数据库中,一般对数据的查询操作是最频繁的,提高数据的查询速度可以有效提升数据库的性能。
1. 分析查询语句
通过分析查询语句,可以了解查询语句的执行情况,找出查询语句的不足之处,从而优化查询语句。
分析查询语句有两种方式:EXPLAIN和DESCRIBE。
1.1 EXPLAIN
基本语法:
EXPLAIN [EXTENDED] SELECT select_options
参数select_type:SELECT类型,可以为以下任何一种:
| 值 | 含义 |
|---|---|
| SIMPLE | 简单SELECT(不使用UNION或子查询) |
| PRIMARY | 最外面的SELECT |
| UNION | UNION中的第二个或后面的SELECT语句 |
| DEPENDENT UNION | UNION中的第二个或后面的SELECT语句,取决于外面的查询 |
| UNION RESULT | UNION的结果。 |
| SUBQUERY | 子查询中的第一个SELECT |
| DEPENDENT SUBQUERY | 子查询中的第一个SELECT,取决于外面的查询 |
| DERIVED | 导出表的SELECT(FROM子句的子查询) |
1.2 DESCRIBE
基本语法:
DESCRIBE SELECT select_options
2. 使用索引优化查询
索引可以快速定位表中的某条记录,使用索引可以提高数据库的查询速度,从而提高数据库的性能。如果不使用索引,查询语句将扫描表中全部记录,速度会很慢;使用索引,查询语句可以根据索引快速定位到待查询记录,从而减少查询的记录数,达到提高查询速度的目的。
一般情况下,索引可以提高查询速度,但并不是所有使用带有索引的字段查询都会起作用。例如下面几种特殊情况:
- 使用LIKE关键字的查询语句
- 使用多列索引的查询语句
- 使用OR关键字的查询语句
3. 优化子查询
子查询可以进行SELECT语句的嵌套查询,即一个SELECT查询的结果作为另一个的条件。它可以一次性完成很多逻辑上需要多个步骤才能完成的SQL操作。
其优点是查询语句很灵活,但是其执行效率不高。
执行子查询时,MySQL需要为内层查询语句的查询结果建立一个临时表,然后外层查询语句从临时表中查询记录。查询完毕后,再撤销这些临时表。因此,子查询的速度会受到一定的影响。如果查询的数据量比较大,这种影响也随之增大。
在MySQL中,可以使用连接(JOIN)查询来替代子查询。它不需要建立临时表,速度比子查询要快。如果查询中使用索引的话,性能会更好。
数据库结构优化
合理的数据库结构不仅可以使数据库占用更小的磁盘空间,而且能够使查询速度更快。设计时,需要考虑数据冗余、查询和更新的速度、字段的数据类型是否合理等多方面内容。
1. 分解表
对于字段较多的表,如果有些字段的使用频率很低,可以将这些字段分离出来形成新的表。因为当一个表的数据量很大时,会由于使用频率低的字段而变慢。
2. 建立中间表
对于需要经常联合查询的表,可以建立中间表提高查询效率。
3. 增加冗余字段
设计数据库表时应该尽量遵循数据库范式理论的规约,尽可能减少冗余字段,让数据库看起来更加精致。但是,合理地加入冗余字段可以提高查询速度。
表的规范化程度越高,表与表之间的关系就越多,需要连接查询的情况也就越多。
不过冗余字段会导致一些新问题。如,一个表中的冗余字段值修改了,就要同步更新其他表中的该字段值,否则就会使原本一致的数据变得不一致。
4. 优化插入速度
插入记录时,影响插入速度的主要是索引、唯一性校验、一次插入记录条数等。
4.1. MyISAM引擎表
- 禁用索引
对于非空表,插入记录时,MySQL会根据表的索引对插入的记录建立索引。如果插入大量数据,建立索引会降低插入记录的速度。可以在插入记录前禁用索引,数据插入完毕后再开启索引。
# 禁用索引
ALTER TABLE table_name DISABLE KEYS;# 启用索引
ALTER TABLE table_name ENABLE KEYS;
空表批量导入数据时不需要进行此操作,因为MyISAM引擎的表是在导入数据之后才建立索引的。
- 禁用唯一性检查
插入数据时,MySQL会对插入的记录进行唯一性校验。这种校验也会降低插入速度。可以先禁用,插入数据后再开启。
# 禁用唯一性校验
SET UNIQUE_CHECKS=0;# 启用唯一性校验
SET UNIQUE_CHECKS=1;
-
使用批量插入
-
使用LOAD DATA INFILE批量导入
4.2. InnoDB引擎表
- 禁用唯一性检查
和MyISAM引擎的使用一样。 - 禁用外键检查
# 禁用外键检查
SET foreign_key_checks=0;# 启用外键检查
SET foreign_key_checks=1;
- 禁止自动提交
# 禁用自动提交
SET autocommit=0;# 启用自动提交
SET autocommit=1;
5. 分析表、检查表和优化表
MySQL提供了分析表、检查表和优化表的语句。
5.1. 分析表
分析表主要是分析关键字的分布,语法:
ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE table_name1 [, table_name2, ...]
5.2. 检查表
MySQL数据库中可以使用CHECK TABLE检查表,主要是检查InnoDB和MyISAM类型的表是否存在错误,语法:
CHECK TABLE table_name1 [, table_name2, ...] ... [option] ...
option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
5.3. 优化表
优化表主要是消除删除或者更新造成的空间浪费。该语句对InnoDB和MyISAM类型的表都有效。主要是优化表中的VARCHAR、BLOB或TEXT类型的字段。语法:
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE table_name1 [, table_name2, ...]
MySQL服务器的优化
1. 服务器硬件优化
服务器的硬件性能直接决定着MySQL数据库的性能。优化方向:
- 配置较大的内存
- 配置调整磁盘系统
- 合理分布磁盘I/O
- 配置多处理器
2. MySQL参数优化
通过优化MySQL参数也可以在不提升硬件的前提下提高资源利用率,从而达到提高服务器性能的目的。配置参数都在my.cnf或者my.ini文件中。
相关文章:
mysql笔记:11. 性能优化
文章目录 概览查询速度优化1. 分析查询语句1.1 EXPLAIN1.2 DESCRIBE 2. 使用索引优化查询3. 优化子查询 数据库结构优化1. 分解表2. 建立中间表3. 增加冗余字段4. 优化插入速度4.1. MyISAM引擎表4.2. InnoDB引擎表 5. 分析表、检查表和优化表5.1. 分析表5.2. 检查表5.3. 优化表…...
基于Docker搭建Maven私服仓库(Linux)详细教程
文章目录 1. 下载镜像并启动容器2. 配置Nexus3. 配置本地Maven仓库 1. 下载镜像并启动容器 下载Nexus3镜像 docker pull sonatype/nexus3查看Nexus3镜像是否下载成功 docker images创建Nexus3的挂载文件夹 mkdir /usr/local/nexus-data && chown -R 200 /usr/local…...
IPSEC VPPN 实验
背景:FW1和FW2为双机热备 要求:在FW5和FW3之间建立一条IPSEC通道,保证10.0.2.0/24网段可以正常访问到192.168.1.0/24IPSEC VPPN实验配置 fw2配置 加密数据流 新建对应IKE...
基于单片机的视觉导航小车设计
目 录 摘 要 I Abstract II 引 言 1 1 总体方案设计 3 1.1 方案论证 3 1.2 项目总体设计 3 2 项目硬件设计 4 2.1 主控模块设计 4 2.1.1单片机选型 4 2.1.2 STM32F103RCT6芯片 4 2.2单片机最小系统电路 5 2.3电机驱动模块设计 7 2.4红外模块设计 8 2.5红外遥控模块设计 9 2.6超…...
Autosar教程-Mcal教程-GPT配置教程
3.3GPT配置、生成 3.3.1 GPT配置所需要的元素 GPT实际上就是硬件定时器,需要配置的元素有: 1)定时器时钟:定时器要工作需要使能它的时钟源 2)定时器分步:时钟源进到定时器后可以通过分频后再给到定时器 定时器模块选择:MCU有多个定时器模块,需要决定使用哪个定时器模块作…...
力扣--动态规划5.最长回文子串
class Solution { public:string longestPalindrome(string s) {// 获取输入字符串的长度int n s.size();// 如果字符串长度为1,直接返回原字符串,因为任何单个字符都是回文串if (n 1)return s;// 创建一个二维数组dp,用于记录子串是否为回…...
PokéLLMon 源码解析(一)
.\PokeLLMon\poke_env\concurrency.py # 导入必要的模块 import asyncio import atexit import sys from logging import CRITICAL, disable from threading import Thread from typing import Any, List# 在新线程中运行事件循环 def __run_loop(loop: asyncio.AbstractEvent…...
银河麒麟服务器操作系统V10【vnc配置多用户登录】
1.添加多用户(规划kingbase使用5901窗口,root使用5903); adduser kingbase 2.配置文件; cp -rp /lib/systemd/system/vncserver.service /etc/systemd/system/vncserver:1.servicecp -rp /lib/systemd/system/vncse…...
Logseq电脑端+安卓端同步gitee或github
文章目录 0.初衷1.电脑端1.1 新建仓库1.2 克隆项目,生成秘钥1.3 添加图谱,选择文件目录,我是原本就有笔记,所以会如下所示。1.4 下载脚本文件1.5赋权限 (windows可跳过)1.6 修改脚本命令1.7 logseq设置同步…...
【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit
1.问题描述 在App中供用户在地图上选择地址,目前在使用Map Kit结合geolocationManager逆地理编码时获取的地址信息描述不准确,希望能提供相应的Demo参考。 解决方案 Demo代码示例: getLocation() { let requestInfo: geoLocationManager.…...
【ros2 control 机器人驱动开发】双关节多控制器机器人学习-example 6
【ros2 control 机器人驱动开发】双关节多控制器机器人学习-example 6 文章目录 前言一、创建controller相关二、逻辑分析RRBotModularJoint类解析ros2_control.xacro解析三、测试运行测试forward_position_controller总结前言 本篇文章在上篇文章的基础上主要讲解双轴机器人驱…...
Learn OpenGL 07 摄像机
定义摄像机参数 glm::vec3 cameraPos glm::vec3(0.0f, 0.0f, 3.0f);//摄像机位置glm::vec3 cameraTarget glm::vec3(0.0f, 0.0f, 0.0f);glm::vec3 cameraDirection glm::normalize(cameraPos - cameraTarget);//摄像机方向,指向z轴正方向 glm::vec3 up glm::vec…...
Linux系统部署火狐浏览器结合内网穿透实现公网访问
目录 前言 1. 部署Firefox 2. 本地访问Firefox 3. Linux安装Cpolar 4. 配置Firefox公网地址 5. 远程访问Firefox 6. 固定Firefox公网地址 7. 固定地址访问Firefox 结语 前言 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊Linux系统…...
Elastic Stack--05--聚合、映射mapping
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.聚合(aggregations)基本概念桶(bucket)度量(metrics) 案例 11. 接下来按price字段进行分组:2. 若想对所…...
【嵌入式——QT】Model/View
【嵌入式——QT】Model/View 基本原理数据模型视图组件代理Model/View结构的一些概念QFileSystemModelQStringListModelQStandardItemModel自定义代理 基本原理 GUI应用程序的一个很重要的功能是由用户在界面上编辑和修改数据,典型的如数据库应用程序,数…...
向量化编程书籍推荐
文章目录 1. 书籍清单 1. 书籍清单 《Linear Algebra and Its Applications》 by Gilbert Strang 这本书是线性代数的经典教材,线性代数是向量化编程的基础。它涵盖了向量、矩阵、线性变换等内容,对理解向量化编程的数学概念非常有帮助《NumPy Beginner…...
算法D43 | 动态规划5 | 1049. 最后一块石头的重量 II 494. 目标和 474.一和零
1049. 最后一块石头的重量 II 本题就和 昨天的 416. 分割等和子集 很像了,可以尝试先自己思考做一做。 视频讲解:动态规划之背包问题,这个背包最多能装多少?LeetCode:1049.最后一块石头的重量II_哔哩哔哩_bilibili 代…...
设计模式—桥接模式
定义: 桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interfce)模式。 本章代码:小麻雀icknn/设计模式练习 - Gitee.com 结构: 抽象化(Abstraction)角色:…...
伊萨卡训练代码
我们建议创建并激活 conda 环境,以确保在下面安装正确的软件包版本的干净环境。 # Optional but recommended: conda create -n ithaca python3.9 conda activate ithaca 克隆此存储库并进入其根目录。通过以下方式安装完整的 ithaca 依赖项(包括训练&am…...
视频产品介绍:AS-VCVR-N多协议视频接入网关
目 录 一、产品概述 (一)非标设备接入 (二)信令流转换 (三)媒体流转发 二、网关特性 三、技术参数 一、产品概述 视频接入网关服务是终端用户与视频源的传输枢纽,实现把前端不同…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...
