MySQL的查询优化思路

目录

前言

解决方案

减少查询

SQL优化

索引优化

减少锁

避免大事务

扩容

硬件升级


前言

一般的系统中,数据库往往都是性能瓶颈。在一个系统中,数据库被使用的频率很高,因为几乎所有的应用程序都需要与数据库交互来读取或写入数据。所以一旦数据库的响应慢,负载突增,则会大大影响系统的运行效率,严重点甚至可能直接崩溃。

面对数据库响应变慢,负载突增问题,应该及时处理,以下是处理的思路,依次考虑

  1. 减少查询
  2. SQL优化
  3. 索引优化
  4. 减少锁
  5. 避免大事务
  6. 扩容
  7. 硬件升级

解决方案

减少查询

减少查询时最优先考虑的优化步骤,具体的做法就是做一层缓存,每次请求优先从缓冲中读取,缓存中不存在数据再来查询数据库,这样能够有效地减少数据库查询的次数。

SQL优化

查询路径优化

使用limit提前终止查询

联表查询中使用小表驱动大表(实际上MySQL的查询优化器会自动优化)

查询语句优化

explain 检查查询语句是否走了索引

查询语句尽量做到索引覆盖,避免回表查询

索引下推:MySQL 5.7 的版本能在二级索引查询后先过滤再回表查询,减少了回表查询的次数 

索引优化

如果索引列数据量过大,只要索引列值足够散列,则可以只截取前面部分做索引

创建联合索引,应当根据索引列值的散列程度由高到低从左到右排列创建,创建联合索引后,叶子节点数据按索引列排序。在查询的时候,根据最左匹配原则,优先匹配最左边散列度最高的列,由于散列度足够高,匹配到的数据最为精确,范围最小,所以遍历时用的时间也最少。

减少锁

MySQL事务的默认隔离级别为 RR(REPEATABLE READ 可重复读)

为了不可重复度问题和部分幻读问题,在 RR 隔离级别下,除了会加 Record Lock(记录锁)外,还会加 Gap Lock(间隙锁)Next-key Lock(临键锁),使用了间隙锁和临键锁,就会使得所得粒度变大,发生死锁的概率也变大,支撑不了高并发业务场景。

为了提高并发度,可以将MySQL的事务隔离级别降为 RC(READ COMMITTED 读已提交)

在 RC 隔离级别下,只会添加 Record Lock(记录锁),只会对要修改的当前行加锁,粒度相比间隙锁和临键锁小了很多,因此能够提升并发度和降低死锁概率。

如果将事务隔离级别修改成 RC,则需要自己去处理事务中的不可重复读问题。在 RC 级别中,每次读取都会得到最新的数据,所以很有可能读取到其他事务提交的修改。

避免大事务

并不是事务中执行的语句很多才叫大事务,而是指运行时间很长的事务。即使事务中只有一条执行语句,但是这条执行语句执行时间很长,它就是一个大事务

不用非索引列来更新数据,会锁全表

尽可能用主键索引列来更新数据。

由于使用非主键索引,锁住非主键索引后还需要回表去锁住主键索引叶子节点中的数据。

在某些情况下,会发生死锁。

事务1事务2执行结构
begin
锁住id=1的主键索引success
begin
锁住id=2的主键索引success

锁住name=b的非主键索引

回表加锁id=2的主键索引

block
锁住name=b的非主键索引dead lock

删除数据时需先检查数据是否存在,因为删除一个不存在的数据,扫描索引后发现不存在,会加上间隙锁。

扩容

在以上措施都做了之后还是没法将很好降低数据库负载,那么还可以采用读写分离的技术方案,为MySQL做一个主从复制,主库处理写请求,从库处理读请求,根据读请求的并发量进行水平扩容,增加从库的数量。

MySQL的主从复制,可以实现读写分离,以及读库的水平扩容,将读请求分散到多个数据库中,从而降低单个数据库的负载,非常适用于读多写少的业务场景

硬件升级

最后,就是升级数据库服务器了,没有什么是升级硬件解决不了的。早点升级服务器,少整一些有的没的优化,早点下班,反正是老板出钱

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

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

相关文章

华为OD机试 - 文件缓存系统——优先队列解法

华为OD机试 - 文件缓存系统——优先队列解法 题目描述题目分析代码解析复杂度分析 题目描述 题目描述链接🔗 题目分析 这题需要我们实现一个LFUCache的自定义数据结构,根据题意,需要分别定义一个put和get方法,用于存储缓存和获…

基于YOLO8的目标检测系统:开启智能视觉识别之旅

文章目录 在线体验快速开始一、项目介绍篇1.1 YOLO81.2 ultralytics1.3 模块介绍1.3.1 scan_task1.3.2 scan_taskflow.py1.3.3 target_dec_app.py 二、核心代码介绍篇2.1 target_dec_app.py2.2 scan_taskflow.py 三、结语 在线体验 基于YOLO8的目标检测系统 基于opencv的摄像头…

从等保测评看行业安全趋势:洞察与预测

在当今数字化时代,网络安全已成为各行各业的头等大事。等保测评(等级保护测评),作为国家对信息系统安全的重要管理手段,不仅关乎企业的合规性,更是行业安全水平的重要衡量标准。本文将从等保测评的视角出发…

敏捷CSM认证:精通敏捷Scum估算方法,高效完成项目!

咱们做项目的时候可能都遇到过这种情况:项目一开始信心满满,觉得 deadline 稳了。结果呢?各种意外状况频出,时间好像怎么都不够用了,最后项目只能无奈延期,整个团队都像霜打的茄子。 说到底,还…

谷粒商城实战笔记-44-前端基础-Vue-整合ElementUI快速开发/设置模板代码

文章目录 一,安装导入ElementUI1,安装 element-ui2,导入 element-ui 二,ElementUI 实战1,将 App.vue 改为 element-ui 中的后台布局2,开发导航栏2.1 开发MyTable组件2.2 注册路由2.3 改造App.vue2.4 新增左…

Qt实现简易CAD软件的开发:技术解析与实现

文章目录 简易CAD软件的开发:技术解析与实现引言项目概述程序入口主窗口的实现主窗口类定义(mainwindow.h)主窗口类实现(mainwindow.cpp) 自定义绘图视图自定义绘图视图类定义(myqgraphicsview.h&#xff0…

深入浅出C语言指针(进阶篇)

深入浅出C语言指针(基础篇) 深入浅出C语言指针(进阶篇) 目录 引言 一、指针和数组 1.数组名的理解 2.指针访问数组 3.一维数组传参的本质 二、二级指针 1.二级指针的概念 2.二级指针的内存表示 3.二级指针的解引用 三、字符指针 1.指针指向单个字符 2.指针指向字…

Django日志配置

settings.py# 日志 LOGGING {version: 1,disable_existing_loggers: False,formatters: {verbose: {format: %(asctime)s %(levelname)s %(pathname)s:%(lineno)d %(message)s,},simple: {format: %(levelname)s %(message)s,},},handlers: {console: {class: logging.StreamH…

便携式自动气象站:科技赋能气象观测

便携式自动气象站,顾名思义,就是一款集成了多种气象传感器,能够自动进行气象观测和数据记录的设备。它体积小巧、重量轻,便于携带和快速部署,可以在各种环境下进行气象数据的实时监测。同时,通过内置的无线…

对于相同网段的IP,部分无法ping通问题

现象1:在Linux上执行 ping 192.168.1.232,无法ping通 分析1:使用ifconfig查询,联网使用eth0口,只能上网192.168.10.xx网段,需要增加网段 解决方法:使用ip addr 查询,本身只具备10网…

企业未进行等保测评会有什么影响

在当今数字化高速发展的时代,信息安全对于企业的重要性日益凸显。信息安全等级保护测评(以下简称等保测评)作为保障企业信息系统安全的重要手段,已成为众多企业必须面对的课题。然而,仍有部分企业未能充分认识到等保测…

版本更新 | Orillusion 0.8发布,与大家同在!

过了这么久,我们Orillusion引擎的大版本更新终于来啦! 这次的版本发布,大部分是更新了引擎底层能力,有兴趣的小伙伴可以直接查看: 🔗 https://github.com/Orillusion/orillusion 其实面对社区的小伙伴&…

应对爬虫过程中代理IP掉线的实用指南

当代理IP在爬虫中频繁掉线时,我们先要了解出现问题的可能原因,这不仅限于技术性因素,还涉及操作策略和环境因素。只有在找到具体原因后,才能针对问题类型从源头解决IP掉线问题。 一、问题原因: 1. 代理IP质量问题导致…

Python将字典转换为DataFrame的实战代码

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

AWS监控工具,监控性能指标

执行AWS监视是为了跟踪在AWS环境中主动运行的应用程序工作负载和资源,AWS监视器跟踪各种AWS云指标,以帮助提高在其上运行的应用程序的整体性能。 借助阈值突破警报系统,AWS应用程序监控在识别性能瓶颈来源方面起着至关重要的作用&#xff0c…

力扣高频SQL 50题(基础版)第五题

文章目录 力扣高频SQL 50题(基础版)第五题1683. 无效的推文题目说明:思路分析:实现过程:结果截图: 力扣高频SQL 50题(基础版)第五题 1683. 无效的推文 题目说明: 表&a…

图片转pdf的软件有哪些?这几种转换工具了解下

在日常的办公学习中,图片转PDF的需求愈发普遍。不论是工作汇报、学习笔记还是生活点滴,我们都希望将重要的图片内容整理成易于查阅的PDF格式。那么,有哪些软件可以做到将图片转换成PDF格式呢?给大家介绍5种简单好用的转换方法&…

C#基础:数据库分表的好处和实现方式

一、分表的好处: 1.提升查询速度:分表筛选后再拼接,而不是查大表,速度会显著提升 2.管理容易:根据业务需求,通常会按照时间或者空间来分表 3.提高并发性:降低锁竞争和查询阻塞的风险&#xf…

Xlua原理 二

一已经介绍了初步的lua与C#通信的原理,和xlua的LuaEnv的初始化内容。 这边介绍下Wrap文件。 一.Wrap介绍 导入xlua后可以看到会多出上图菜单。 点击后生成一堆wrap文件,这些文件是lua调用C#时进行映射查找用的中间代码。这样就不需要去反射调用节约性…

ubuntu安装mysql8.0

文章目录 ubuntu版本安装修改密码取消root跳过密码验证 ubuntu版本 22.04 安装 更新软件包列表 sudo apt update安装 MySQL 8.0 服务器 sudo apt install mysql-server在安装过程中,系统可能会提示您设置 root 用户的密码,请务必牢记您设置的密码。…