MySQL追梦旅途之性能优化
1、索引优化
索引可以显著加速查询操作,但过多或不适当的索引也会带来负面影响(如增加写入开销)。因此,选择合适的索引至关重要。
创建索引:
为经常用于WHERE子句、JOIN条件和ORDER BY排序的列创建索引。
CREATE INDEX idx_last_name ON employees (last_name);
复合索引:
如果多个列经常一起出现在查询条件中,考虑创建复合索引。
first_name, last_name复合索引,即使 where first_name 也会走复合索引,但是where last_name不行
CREATE INDEX idx_composite ON orders (customer_id, order_date);
覆盖索引:
确保索引包含所有需要返回的数据列,从而避免回表查找。
意思是索引里面是你需要查询的字段,比如product_name
CREATE INDEX idx_covering ON products (category_id, price, product_name);索引`first_name`, `last_name`即使last_name不是索引第一个,但是查询里面有last_name,所以走索引
如果查询字段存在索引里面没有的字段(不包括主键)则不会走索引
SELECT last_name FROM `123`.`Employees` WHERE last_name=''
索引维护:
定期分析和优化索引,删除不再使用的索引以减少不必要的开销。
2、查询优化
优化SQL查询可以帮助减少执行时间和资源使用。
避免全表扫描:
尽量使用索引来限制扫描范围,避免对大表进行全表扫描。
EXPLAIN SELECT birth_date,first_name FROM Employees WHERE last_name=''

减少结果集大小:
只选择需要的字段,而不是使用SELECT *。
优化连接(JOIN):
确保参与连接的列上有适当的索引,并且尽可能缩小连接前的结果集。
SELECT o.order_id, c.customer_name
FROM orders o JOIN customers c ON o.customer_id = c.customer_id
WHERE o.status = 'shipped';
预过滤:在执行连接之前,尽可能地减少每个表中的行数。你可以通过添加更严格的WHERE子句条件来实现这一点。比如,如果只需要特定日期范围的数据,就在连接之前用WHERE子句限定日期范围。
示例:
场景描述:
在一个电子商务系统中,有orders(订单表)和products(商品表)。我们想要获取在过去一个月内购买了特定类别商品的所有订单详情。如果不进行预过滤,这将涉及到两个大表之间的全表扫描和连接。
SELECTo.order_id,p.product_name,o.order_date
FROMorders oJOIN order_items oi ON o.order_id = oi.order_idJOIN products p ON oi.product_id = p.product_id
WHEREo.order_date >= '2024-11-01' AND p.category = 'Electronics';
首先对products表按照商品类别进行预过滤,然后再执行连接操作。这样可以大大减少需要连接的数据量。
-- 用一个临时表做中间数据
WITH FilteredProducts AS (SELECTproduct_id,product_name FROMproducts WHEREcategory = 'Electronics'
)SELECTo.order_id,fp.product_name,o.order_date
FROMorders oJOIN order_items oi ON o.order_id = oi.order_idJOIN FilteredProducts fp ON oi.product_id = fp.product_id
WHEREo.order_date >= '2024-11-01';
分页:对于大型结果集,考虑使用分页技术来限制每次查询返回的行数。这对于前端展示大量数据尤其有用。
聚合:如果可能的话,在连接之前对数据进行聚合。这意味着可以在连接前就计算出统计信息,如SUM、COUNT等,从而减少连接操作的数据量。
示例:
场景描述:
假设有一个电子商务平台,其中有两个表——orders(订单表)和order_items(订单详情表)。orders表存储了每个订单的基本信息,而order_items表则记录了每个订单中购买的商品详情以及单价等信息。现在想要获取每个用户的总消费金额。
SELECTo.user_id,SUM( oi.quantity * oi.price ) AS total_spent
FROMorders oJOIN order_items oi ON o.order_id = oi.order_id
GROUP BYo.user_id;
首先在order_items表上根据order_id聚合出每个订单的总金额,然后再与orders表连接,并最终按用户ID分组计算总消费额:
WITH OrderTotals AS (SELECTorder_id,SUM( quantity * price ) AS order_total FROMorder_items GROUP BYorder_id
)SELECTo.user_id,SUM( ot.order_total ) AS total_spent
FROMorders oJOIN OrderTotals ot ON o.order_id = ot.order_id
GROUP BYo.user_id;
临时表或CTE(Common Table Expressions):有时将中间结果存储在临时表或使用公用表表达式(CTE)可以简化查询逻辑,并且允许你更早地应用过滤条件。
使用EXPLAIN分析查询计划:
通过EXPLAIN关键字查看MySQL如何执行查询,识别潜在问题。
EXPLAIN SELECT * FROM orders WHERE order_date > '2024-01-01';
3、缓存
大部分没有应用场景,命中率不高,消耗内存
利用缓存机制可以减少重复查询数据库的次数,降低负载。
查询缓存(Query Cache):
虽然MySQL 8.0版本之后官方已经移除了内置查询缓存功能,但在某些场景下仍可以通过第三方工具实现类似效果。
应用级缓存:
在应用程序层面使用Redis、Memcached等内存存储来缓存频繁访问的数据。
4、硬件优化
硬件升级可以直接影响数据库性能。
**增加内存:**更多的RAM意味着更大的缓冲池(InnoDB Buffer Pool),从而减少磁盘I/O。
**SSD硬盘:**相比于传统HDD,固态硬盘(SSD)提供更快的读写速度,尤其适合随机访问模式。
**多核CPU:**对于高并发工作负载,多核心处理器能够更好地处理并发请求。
5、数据库参数调整
根据具体的使用场景调整MySQL配置参数,可以进一步提升性能。
innodb_buffer_pool_size:
设置InnoDB存储引擎使用的缓存大小,默认值通常是物理内存的70%-80%。
query_cache_size:
配置查询缓存(Query Cache)大小的参数,虽然MySQL 8.0后不再支持,但对于老版本,可以根据实际情况设置查询缓存大小。
max_connections:
根据预期的最大并发连接数调整最大连接数限制。
thread_cache_size:
设置线程缓存大小,以快速响应新连接。
相关文章:
MySQL追梦旅途之性能优化
1、索引优化 索引可以显著加速查询操作,但过多或不适当的索引也会带来负面影响(如增加写入开销)。因此,选择合适的索引至关重要。 创建索引: 为经常用于WHERE子句、JOIN条件和ORDER BY排序的列创建索引。 CREATE I…...
【机器学习】【无监督学习——聚类】从零开始掌握聚类分析:探索数据背后的隐藏模式与应用实例
从零开始掌握聚类分析:探索数据背后的隐藏模式与应用实例 基本概念聚类分类聚类算法的评价指标(1)内部指标轮廓系数(Silhouette Coefficient)DB指数(Davies-Bouldin Index)Dunn指数 (…...
基于深度Q网络(Deep Q-Network,DQN)的机器人路径规划,可以自定义地图,MATLAB代码
深度Q网络(Deep Q-Network,DQN)是一种结合了深度学习和Q学习的强化学习算法,由DeepMind在2015年提出。 1. 算法介绍 DQN算法通过使用深度神经网络来近似Q值函数,解决了传统Q-learning在处理具有大量状态和动作的复杂…...
Python-从文件中读取数据-Sat-Sun
10.1 文件读取数据可以整个文件读取,也可以逐行读取。 首先在保存有.py文件的文件夹里创建一个pi_digist.txt文件,文件内容是 3.14 9265 3589执行程序 file_reader.py with open(pi_digist.txt) as file_object: #接受文件名参数,在程序所…...
测试工程师的职业规划
测试人员在管理上的发展 基层测试管理者:测试组长 工作内容:安排小组工作,提升小组成员测试能力,负责重要的测试工作。 负责对象:版本,项目 中层测试管理者:测试经理 负责对象࿱…...
使用 Puppeteer 快速上手 Node.js 爬虫
使用 Puppeteer 库通过自动化浏览器来访问百度图片搜索,并在搜索结果中下载图片。代码分为两部分: 自动化浏览器任务:使用 Puppeteer 浏览百度图片搜索并获取图片 URL。图片下载:检查图片 URL 类型(base64 或 URL&…...
浏览器的跨域问题与解决方案
浏览器的跨域问题与解决方案 浏览器的跨域问题源于同源策略(Same-Origin Policy)这一安全机制。同源策略要求两个页面具有相同的协议、域名和端口号,才能相互访问资源和数据。这一机制旨在防止恶意网站执行跨站脚本攻击,从而保护…...
MyBatis一二级缓存的区别?
大家好,我是锋哥。今天分享关于【MyBatis一二级缓存的区别?】面试题。希望对大家有帮助; MyBatis一二级缓存的区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MyBatis 的缓存机制分为 一级缓存 和 二级缓存&…...
[2024-12 CISCN 长城杯] Crypto
fffffhash 【也可以看这题,一样的:https://github.com/DownUnderCTF/Challenges_2023_Public/blob/main/crypto/fnv/solve/solution_joseph_LLL.sage】 题目描述: import os from Crypto.Util.number import * def giaogiao(hex_string):b…...
pytorch bilstm crf的教程,注意 这里不支持批处理,要支持批处理 用torchcrf这个。
### Bi-LSTM Conditional Random Field ### pytorch tutorials https://pytorch.org/tutorials/beginner/nlp/advanced_tutorial.html ### 模型主要结构:  pytorch bilstm crf的教程,注意 这里不支持批处理 Python version…...
Python毕业设计选题:基于django+vue的疫情数据可视化分析系统
开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 员工管理 疫情信息管理 检测预约管理 检测结果…...
tomcat被检测到目标URL存在htp host头攻击漏洞
AI越来越火了,我们想要不被淘汰就得主动拥抱。推荐一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站 Tomcat被检测到目标URL存在http host头攻击漏洞,这个漏洞复现一下就是黑客访问你的网站,之后中修改请求头中的host属…...
1.初识python
文章目录 1.python背景知识2.python优缺点3.为什么要学习python 大家好,我是晓星航。今天为大家带来的是初识python 相关的讲解!😀 1.python背景知识 我们学习python需要做的事情: 1.python 环境搭建 2.python 基础语法 3.pyth…...
【密码学】ZUC祖冲之算法
一、ZUC算法简介 ZUC算法(祖冲之算法)是中国自主研发的一种流密码算法,2011年被3GPP批准成为4G国际标准,主要用于无线通信的加密和完整性保护。ZUC算法在逻辑上采用三层结构设计,包括线性反馈移位寄存器(L…...
Python面试常见问题及答案8
一、基础部分 问题1: 解释Python中的切片(slicing)操作在列表、字符串上是如何工作的? 答案: 在列表和字符串中,切片操作可以获取其中的一部分元素。切片的语法是[start:stop:step]。 对于列表࿰…...
ASP.net Core EntityFramework Code EF code 汇总
Entity FrameWork EF 总结 EF Core EF Core 如果实体模型很多,全部放在 上下文中的 OnModelCreating(ModelBuilder modelBuilder) 不太好维护 可以把实体模型 分离出去,每个类创建一个实体模型 public class BookConfiguration :IEntityT…...
u3d动画系统五【StateMachineBehaviour类】
一.StateMachineBehaviour概述 状态机行为是一类特殊脚本。与将常规 Unity 脚本 (MonoBehaviour) 附加到单个游戏对象类似,您可以将 StateMachineBehaviour 脚本附加到状态机中的单个状态。因此可编写一些将在状态机进入、退出或保持在特定状态时执行的代码。这意味…...
IS-IS协议
IS-IS协议介绍 IS-IS(Intermediate System to Intermediate System)协议是一种链路状态的内部网关协议(IGP),用于在同一个自治系统(Autonomous System, AS)内部的路由器之间交换路由信息。IS-I…...
使用C++实现RSA加密解密
一,RSA简介。 RSA,一种非对称加密方式。是目前为止最有影响力的加密算法之一,而且是第一个同时应用于加密和数字签名的算法。 其原理为:两个大素数相乘容易,但是若想将两个大素数相乘的积再分解为两个原始的素数很难…...
C++归并与快速
快排 #include<bits/stdc.h> #include<algorithm> using namespace std; void f(int,int); void cl(int,int,int); void q(int,int); int a[211]; int n; int main(){cin>>n;for(int i0;i<n;i){cin>>a[i];}q(0,n-1);for(int i0;i<n;i){cout<…...
ChatGPT Plus 怎么购买?2026 开通教程
如果你还在犹豫是否有必要开通 Plus,可以先通过AI模型聚合平台 做一些基础体验,对比不同模型在写代码、改文档、做总结时的效果,再决定要不要正式升级 ChatGPT Plus。到了 2026 年,ChatGPT 已经不只是“聊天工具”,更像…...
ElevenLabs河南话合成效果翻车?5大本地化陷阱与97.3%可听度提升实测方案
更多请点击: https://codechina.net 第一章:ElevenLabs河南话语音合成效果翻车现象全景扫描 近期多位河南本地开发者及方言内容创作者反馈,ElevenLabs官方API在调用其“multilingual v2”模型尝试生成河南话(中原官话郑开片&…...
乒乓球教程
【课程教程资料】乒乓球入门必看,全方位发球技巧教学 文件大小: 3.9GB内容特色: 3.9GB高清发球拆解,握拍站位旋转全囊括适用人群: 零基础球友、校园社团、陪练家长核心价值: 20课时速成稳定发球,直接提升实战得分率下载链接: https://pan.qu…...
如何打破闭源代码智能模型的垄断?DeepSeek-Coder-V2的技术突围与实践指南
如何打破闭源代码智能模型的垄断?DeepSeek-Coder-V2的技术突围与实践指南 【免费下载链接】DeepSeek-Coder-V2 DeepSeek-Coder-V2: Breaking the Barrier of Closed-Source Models in Code Intelligence 项目地址: https://gitcode.com/GitHub_Trending/de/DeepSe…...
SDR++软件无线电:3个关键步骤让你轻松探索无线电频谱世界
SDR软件无线电:3个关键步骤让你轻松探索无线电频谱世界 【免费下载链接】SDRPlusPlus Cross-Platform SDR Software 项目地址: https://gitcode.com/GitHub_Trending/sd/SDRPlusPlus 你是否曾经好奇过无线电波中隐藏着怎样的秘密?从FM广播到航空通…...
别再手动一个个改了!ArcGIS属性表字段批量删除与数据裁剪的‘偷懒’技巧
ArcGIS高效工作流:属性表与数据批处理的进阶技巧 在GIS工程师的日常工作中,最令人头疼的莫过于那些看似简单却需要重复上百次的操作——删除几十个无用字段、裁剪数百个栅格图层、批量修改投影坐标系。这些机械性劳动不仅消耗时间,更消磨创造…...
别再手动复制文件了!Mathtype 7.4 一键配置脚本,搞定Office和WPS(附常见错误修复)
数学公式编辑神器Mathtype 7.4全自动部署方案:告别手动配置的繁琐时代 在科研论文、技术文档撰写过程中,数学公式的编辑效率直接影响工作进度。Mathtype作为专业数学公式编辑工具,其强大功能常被手动配置的复杂步骤所掩盖。传统方法需要用户反…...
MC端口映射完全教程:路由器虚拟服务器配置+防火墙放行+内网穿透备用方案
一、什么是MC端口映射MC端口映射是指将运行《我的世界》服务器的电脑内网IP和端口(Java版默认25565),通过路由器设置“映射”到公网,让外网玩家能够连接进来。简单说,就是把你自己电脑上开的游戏房“门牌号”告诉全世界…...
从零训练潮州话语音克隆模型:ElevenLabs Fine-tuning实战(附1782条标注语料清洗脚本)
更多请点击: https://codechina.net 第一章:从零训练潮州话语音克隆模型:ElevenLabs Fine-tuning实战(附1782条标注语料清洗脚本) 语料准备与质量校验 潮州话语音克隆对数据一致性要求极高。我们采集并人工标注了178…...
Crypto-JS WordArray 数据结构终极指南:深入解析加密算法的核心基石
Crypto-JS WordArray 数据结构终极指南:深入解析加密算法的核心基石 【免费下载链接】crypto-js JavaScript library of crypto standards. 项目地址: https://gitcode.com/gh_mirrors/cr/crypto-js 你是否曾在使用 Crypto-JS 进行加密操作时,困惑…...
