DBA技术栈(三):MySQL 性能影响因素
文章目录
- 前言
- 一、影响MySQL性能的因素
- 1.1 商业上的需求
- 1.2 应用架构规划
- 1.3 查询语句使用方式
- 1.4 Schema的设计
- 1.5 硬件环境
- 总结
前言
大部分人都一致认为一个数据库应用系统(这里的数据库应用系统概指所有使用数据库的系统)的性能瓶颈最容易出现在数据的操作方面,而数据库应用系统的大部分数据操作都是通过数据库管理软件所提供的相关接口来完成的。所以数据库管理软件也就很自然的成为了数据库应用系统的性能瓶颈所在,这是当前业界比较普遍的一个看法。数据库有使用场景的适配性,不能认为关系型数据库是万能的。比如大批量数据的离线报表,应借助hive离线数仓去解决,设计到视频/图片等数据可以借助hbase或是图数据库等。
一、影响MySQL性能的因素
1.1 商业上的需求
高并发:如果业务需要处理大量的并发请求,那么MySQL的性能就会受到影响,因为MyQL在高并发的情况下可能会出现瓶颈。
数据量大:如果业务需要存储和管理大量的数据,那么MySQL可能会出现性能瓶颈,因为MySQL需要处理大量的数据读写操作。
数据复杂性:如果业务需要对复杂的数据进行查询,那么MySQL需要处理的数据结构就会变得更加复杂,从而影响性能。
数据安全性:如果业务对数据的安全性有较高的要求,那么MySQL就需要更多的资源来保证数据的安全性,从而影响性能表现。
数据更新频率:如果业务需要频繁更新数据,那么MyQL的性能就会降低,因为MyQL需要处理大量的更新操作。
数据备份和恢复:如果业务需要进行数据备份和恢复,那么MySQL也需要消耗更多的资源来保证数据的安全性,从而影响性能表现。
1.2 应用架构规划
-
数据库连接数
应用架构中数据库连接数的设置会直接影响MySQL数据库连接池的大小,从而影响数据库的性能。连接池的大小决定了应用系统可以同时连接数据库的最大数。如果连接池设置太小,会导致数据库连接数不足,从而影响数据库性能。如果连接池大小设置太大,会浪费数据库连接资源,导致性能下降。 -
数据库读写分离
在应用架构中,如果使用数据库读写分离的方式来处理读写操作,会影响MySQL的性能。读写分离会导致数据的读写操作分散到不同的数据库实例上,从而增加了数据同步的开销,可能会导致数据不一致的问题。因此,在使用读写分离时需要考虑数据同步的方式和策略,以最小化成本。 -
缓存架构
应用架构中考虑使用缓存来加速数据访问,会影响MySql的性能。缓存可以有效降低数据库的访问次数,从而减轻数据库的压力。但是,缓存的使用需要考虑缓存的过期时间、缓存数据的一致性等问题,否则可能会导致数据不一致或者缓存数据过多占用过多的内存资源。 -
数据库分库分表
在应用架构中,如果需要处理海量数据,可能需要采用分库分表的方式来扩展数据库性能。分库分表会导致数据的分散,增加了数据同步的开销,可能会导致数据一致性的问题。因此,在采用分库分表的方式时需要考虑数据同步的方式和策略,以最小化成本。 -
数据库集群架构
在应用架构中,如果需要处理高并发、大数据量的请求,可能需要采用数据库集群的方式来扩展数据库性能。数据库集群会导致数据的分布式处理,增加了数据同步和负载均衡的开销,可能导致性能问题。因此,在采用数据库集群的方式时需要考虑集群的负载均衡和故障转移等问题,以保证数据库的性能和可用性。
1.3 查询语句使用方式
如果查询语句不够优化,可能会导致性能问题,例如查询速度变慢、占用过多的资源等。因此,需要编写高效的查询语句,尽可能地利用索引和优化器,以提高查询性能。
以下是一些查询语句对MySql性能的影响:
SELECT COUNT(*) FROM table_name;
这种查询语句通常用于统计表中记录数,虽然它的执行速度很快,但是如果表很大,则会消耗很多内存资源,从而降低系统性能。
SELECT * FROM large_table LIMIT 0,1000;
这种语句用于从大型表中获取前几条记录,由于MySql默认不会使用索引,所以每次查询都会扫描整张表,导致查询速度非常慢。解决方案是为该表添加适当的索引,以便MySql可以使用索引来加快查询速度。
SELECT column_name, column_name FROM large_table;
如果表非常大,则每次查询都需要扫描整张表。为了提高查询性能,可以为表添加适当的分区,并使用分区查询来提高查询速度。
SELECT column_name FROM table_name JOIN other_table ON table_name.column_name = other_table.column_name;
如果两个表之间的连接条件不是一个唯一的键,则查询性能可能会受到影响。在这种情况下,可以使用索引来加快查询速度。
SELECT column_name, column_name, column_name, ... FROM large_table WHERE column_name = 'value' OR column_name = 'value';
如果查询语句中包含多个OR条件,MySql需要扫描所有的OR条件,并对每个条件进行单独查询。这将导致查询性能下降。解决方案是使用UNION ALL语句将多个子查询合并成一个,或者将多个条件合并成一个子查询。
SELECT column_name, column_name, column_name, ... FROM large_table WHERE column_name = 'value' AND column_name = 'value';
如果查询语句中包含多个AND条件,MySql需要扫描所有的AND条件,并对每个条件进行单独查询。这将导致查询性能下降。解决方案是使用UNION ALL语句将多个子查询合并成一个,或者将多个条件合并成一个子查询。
SELECT column1, column2 FROM large_table WHERE column1 = 'value1'
UNION ALL
SELECT column3, column4 FROM large_table WHERE column3 = 'value3';
SELECT column_name, column_name, column_name, ... FROM large_table WHERE column_name BETWEEN value1 AND value2;
如果WHERE子句中包含BETWEEN条件,MySql可能需要扫描大量数据,导致查询性能下降,解决方案是使用适当的索引来加快查询。
SELECT column_name1, column_name2 FROM table_name GROUP BY column_name1;
如果GROUP BY子句中包含非唯一列,MySql需要对每个唯一值进行分组,这将导致查询速度变慢。解决方案可以是使用唯一列作为GROUP BY子句的列,或者使用UNIQUE索引来加快查询性能。
SELECT column_name WHERE column_name > 'value';
如果WHERE子句句式中包含一个大于号,MySql需要使用全表扫描,这将导致性能下降。解决方法是使用索引来加快全表扫描的速度。
SELECT COUNT(column_name) FROM table_name WHERE column1 = 'value' and column2 = 'value';
如果查询中包含多个条件,MySQL可能需要扫描大量的行,导致性能下降。解决方法是使用适当的索引来加快查询速度。
1.4 Schema的设计
-
数据冗余
在数据库表结构设计中,数据冗余是指在多个表中存储相同的数据,例如,在不同的表中存储相同字段的数据。如果数据冗余过多,会导致数据不一致以及查询效率低下。因此,在设计表结构时,应该尽量减少数据冗余,只在必要的情况下使用冗余数据。 -
索引设计
索引是数据库中非常重要的一部分,它可以大大提高查询效率。在设计表结构和创建索引时,应该考虑到查询的需求和数据的分布情况,合理设计索引可以提高查询效率。例如,在经常被查询的列上创建索引,可以大大提高查询速度。 -
表结构设计
在设计表结构的时候,应该考虑到表的大小、数据类型、存储引擎等因素。例如,如果表中的列非常大,会占用过多的内存和磁盘空间,导致查询效率降低。因此,应该尽量减少列的大小,使用合适的数据类型。另外,选择合适的存储引擎也会影响数据库的性能,例如InnoDB和MyISAM存储引擎有不同的性能特点,应该根据具体情况选择合适的存储类型。 -
表关联设计
在数据库中,表之间的关联关系非常重要,但是如果设计不当,会导致性能问题。例如,在设计关联表时,应该尽量减少表之间的关联次数,避免出现嵌套表和过多的关联操作。另外,应该尽量避免使用复杂的关联查询,而是采用简单的查询语句来获取所需信息。 -
数据库分区
在数据库中,数据分区可以提高数据库的性能和可扩展性。通过将数据按照一定规则分成多个区域,可以减少查询时的数据量,提高查询效率。例如,可以将数据按照地理位置、时间等因素分成不同的区域,从而提高查询效率。
1.5 硬件环境
MySQL数据库的性能受到硬件资源的限制,包括CPU、内存、磁盘、网络等。如果硬件资源不足,MySQL数据库可能会出现性能问题,例如响应时间变慢、查询速度变慢等。因此,在选择硬件资源时需要充分考虑MySQL数据库的负载情况,以确保足够的资源来支持MySQL数据库的运行。
总结
以上介绍了影响数据性能的因素,可能不够全面,还望各位看官指出,评论交流~
相关文章:

DBA技术栈(三):MySQL 性能影响因素
文章目录 前言一、影响MySQL性能的因素1.1 商业上的需求1.2 应用架构规划1.3 查询语句使用方式1.4 Schema的设计1.5 硬件环境 总结 前言 大部分人都一致认为一个数据库应用系统(这里的数据库应用系统概指所有使用数据库的系统)的性能瓶颈最容易出现在数…...

SpringCloud GateWay 在全局过滤器中注入OpenFeign网关后无法启动
目录 一、问题 二、原因 1、修改配置 2、添加Lazy注解在client上面 3、启动成功 一、问题 当在gateway的全局过滤器GlobalFilter中注入OpenFeign接口的时候会一直卡在路由中,但是不会进一步,导致启动未成功也未报错失败 2024-01-18 22:06:59.299 I…...

web前端项目-贪吃蛇小游戏【附源码】
web前端项目-贪吃蛇小游戏 【贪吃蛇】是一款经典的小游戏,采用HTML、CSS和JavaScript技术进行开发,玩家通过控制一条蛇在地图上移动,蛇的目的是吃掉地图上的食物,并且让自己变得更长。游戏的核心玩法是控制蛇的移动方向和长度&am…...

ICCV2023 | PTUnifier+:通过Soft Prompts(软提示)统一医学视觉语言预训练
论文标题:Towards Unifying Medical Vision-and-Language Pre-training via Soft Prompts 代码:https://github.com/zhjohnchan/ptunifier Fusion-encoder type和Dual-encoder type。前者在多模态任务中具有优势,因为模态之间有充分的相互…...

代码随想录 Leetcode459. 重复的子字符串(KMP算法)
题目: 代码(首刷看解析 KMP算法 2024年1月18日): class Solution { public:void getNext(string& s,vector<int>& next) {int j 0;next[0] j;for (int i 1; i < s.size(); i) {while (j > 0 && s…...

Rust之构建命令行程序(三):重构改进模块化和错误处理
开发环境 Windows 10Rust 1.74.1 VS Code 1.85.1 项目工程 这次创建了新的工程minigrep. 重构改进模块化和错误处理 为了改进我们的程序,我们将修复与程序结构及其处理潜在错误的方式有关的四个问题。首先,我们的main函数现在执行两项任务:解析参数和…...

广和通AI解决方案“智”赋室外机器人迈向新天地!
大模型趋势下,行业机器人将具备更完善的交互与自主能力,逐步迈向AI 2.0时代,成为人工智能技术全面爆发的重要基础。随着行业智能化,更多机器人应用将从“室内”走向“室外”,承担更多高风险、高智能工作。复杂的室外环…...

C++I/O流——(4)格式化输入/输出(第二节)
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝 含泪播种的人一定能含笑收获ÿ…...

九、K8S-label和label Selector
label和label selector 标签和标签选择器 1、label 标签: 一个label就是一个key/value对 label 特性: label可以被附加到各种资源对象上一个资源对象可以定义任意数量的label同一个label可以被添加到任意数量的资源上 2、label selector 标签选择器 L…...

【.NET Core】 多线程之(Thread)详解
【.NET Core】 多线程之(Thread)详解 文章目录 【.NET Core】 多线程之(Thread)详解一、概述二、线程的创建和使用2.1 ThreadStart用于无返回值,无参数的方法2.2 ParameterizedThreadStart:用于带参数的方法 三、线程的…...

苹果笔记本 macbook 在 office word 中使用 mathtype 的方法
前言 想在 MacBook 中使用 mathtype,去搜索,去 Apple Store 下载也发现没有 解决方法 打开 office Word 的「插入」中的「获取加载项」、「我的加载项」。 在应用商店中下载,需要登录自己的微软账号。 加载成功后就可以使用了。 注意 和…...

课表排课小程序怎么制作?多少钱?
在当今的数字化时代,无论是购物、支付、点餐,还是工作、学习,都离不开各种各样的微信小程序。其中,课表排课小程序就是许多教育机构和学校必不可少的工具。那么课表排课小程序怎么制作呢?又需要多少钱呢? …...

C语言总结十三:程序环境和预处理详细总结
了解程序的运行环境可以让我们更加清楚的程序的底层运行的每一个步骤和过程,做到心中有数,预处理阶段是在预编译阶段完成,掌握常用的预处理命令语法,可以让我们正确的使用预处理命令,从而提高代码的开发能力和阅读别人…...

tinyxml2
使用tinyxml2,得知道一些xml基础 xml tutorial--菜鸟 tinyxml2类对象 链接 结构 XMLNode 什么是节点 节点:元素、声明、文本、注释等。 XMLDocument xml文档(文件)对象。 作用: 加载xml文件, tinyxml2作用 先定义两个宏 …...
What is `@Controller` does?
Controller 是SpringMVC注解,标记一个类作为Web控制器(Controller),负责处理HTTP请求并返回响应结果 在SpringMVC中,控制器类的主要职责是: 1、接收来自客户端的HTTP请求 2、调用服务层或其他业务逻辑组件…...

新版AndroidStudio dependencyResolutionManagement出错
在新版AndroidStudio中想像使用4.2版本或者4.3版本的AndroidStudio来构造项目?那下面这些坑我们就需要来避免了,否则会出各种各样的问题。 一.我们先来看看新旧两个版本的不同。 1.jdk版本的不同 新版默认是jdk17 旧版默认是jdk8 所以在新版AndroidSt…...
第三天业务题
3-1 你们的项目是如何进行参数校验的 在我们的项目中,通常使用以下2种方式进行参数校验: 1.手动校验:在方法内部,我们可以手动编写代码来对参数进行校验。例如,使用条件判断语句(if-else)来检…...
nestjs 装饰器
1、装饰器定义 装饰器是一种特殊的类型声明,它可以附加在类、方法、属性、参数上边 需开启tsconfig.json中 "experimentalDecorators":true 生成tsconfig.json文件 tsc -init 2、类装饰器 // 类装饰器 主要是通过符号添加装饰器 // 装饰器会自动把cl…...

一款开源且不限制大小可以设置过期时间的支持分享的的开源文件共享系统picoshare 部署教程
1.拉取镜像 2.部署 创建目录 mkdir -p /opt/picoshare/data 部署 其中:"somesecretpass"是密码 docker run \--env "PORT4001" \--env "PS_SHARED_SECRETsomesecretpass" \--publish 10005:4001/tcp \--volume "/opt/picoshare/data:…...

eBPF运行时安全
引言 eBPF作为当前linux系统上最为炙手可热的技术,通常被用于网络流量过滤和分析、系统调用跟踪、性能优化、安全监控,当下比较知名的项目有Cilium、Falco等。 Cilium 是一个开源的容器网络和安全性项目,致力于提供高效的容器通信和强大的安…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...