MySQL性能优化,SQL调优,SQL调优的手段

文章目录

      • 对MySQL性能的优化的理解
        • 硬件和操作系统层面的优化
        • 架构设计层面的优化
        • MySQL程序配置优化
        • SQL优化
      • SQL调优有哪几种方式
        • 1.EXPLAIN
        • 2.SQL语句中IN包含的值不应过多
        • 3.SELECT语句务必指明字段名称
        • 4.当只需要一条数据的时候,使用limit 1
        • 5.如果排序字段没有用到索引,就尽量少排序
        • 6.如果限制条件中其他字段没有索引,尽量少用or
        • 7.尽量用union all代替union
        • 8.区分in和exists、not in和not exists

对MySQL性能的优化的理解

MySQL性能调优可以分为以下四个方面来调优:

  • 硬件和操作系统层面的优化
  • 架构设计层面的优化
  • MySQL程序配置的优化
  • SQL优化
硬件和操作系统层面的优化

在这里插入图片描述

架构设计层面的优化

在这里插入图片描述

在这里插入图片描述

MySQL程序配置优化

在这里插入图片描述

SQL优化

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

SQL调优有哪几种方式

1.EXPLAIN

type列,连接类型。一个好的SQL语句至少要达到range级别。杜绝出现all级别。
key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引方式。
key_len列,索引长度。
rows列,扫描行数。该值是个预估值。
extra列,详细说明。注意,常见的不太友好的值,如下:Using filesort,Using temporary。

2.SQL语句中IN包含的值不应过多

MySQL对于IN做了相应的优化,即将IN中的常量全部存储在一个数组里面,而且这个数组是排好序的。但是如果数值较多,产生的消耗也是比较大的。再例如:select id from t where num in(1,2,3) 对于连续的数值,能用between就不要用in了;再或者使用连接来替换。

3.SELECT语句务必指明字段名称

SELECT*增加很多不必要的消耗(CPU、IO、内存、网络带宽);增加了使用覆盖索引的可能性;当表结构发生改变时,前断也需要更新。所以要求直接在select后面接上字段名。

4.当只需要一条数据的时候,使用limit 1

这是为了使EXPLAIN中type列达到const类型
如果加上limit1,查找到就不用继续往后找了

5.如果排序字段没有用到索引,就尽量少排序

可以在程序中排序

6.如果限制条件中其他字段没有索引,尽量少用or

or两边的字段中,如果有一个不是索引字段,而其他条件也不是索引字段,会造成该查询不走索引的情况。很多时候使用union all或者是union(必要的时候)的方式来代替“or”会得到更好的效果。

7.尽量用union all代替union

union和union all的差异主要是前者需要将结果集合并后再进行唯一性过滤操作,这就会涉及到排序,增加大量的CPU运算,加大资源消耗及延迟。当然,union all的前提条件是两个结果集没有重复数据。

8.区分in和exists、not in和not exists

select * from 表A where id in (select id from 表B)

上面SQL语句相当于

select * from 表A where exists(select * from 表B where 表B.id=表A.id)

区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询。所以IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

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

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

相关文章

二叉树算法—后继节点

与其明天开始,不如现在行动! 文章目录 1 后继节点1.1 解题思路1.2 代码实现 💎总结 1 后继节点 1.1 解题思路 二叉树节点结构定义如下: public static class Node { public int cal; public Node left; public Node right; public…

深度学习中的注意力机制:原理、应用与实践

深度学习中的注意力机制:原理、应用与实践 摘要: 本文将深入探讨深度学习中的注意力机制,包括其原理、应用领域和实践方法。我们将通过详细的解析和代码示例,帮助读者更好地理解和应用注意力机制,从而提升深度学习模…

100天精通Python(可视化篇)——第109天:Pyecharts绘制各种常用地图(参数说明+代码实战)

文章目录 专栏导读一、地图应用场景二、参数说明1. 导包2. add函数 三、地图绘制实战1. 省市地图2. 中国地图3. 中国地图(带城市)4. 中国地图(分段型)5. 中国地图(连续型)6. 世界地图7. 行程轨迹地图8. 人口…

WordPress最廉价优化整站的加载速度

为什么说一个站不优化就等于一个人做整个团队的事务导致项目进展慢,网站也是如此 图片、静态文件、php分离加速,加载速度并不是很快但是很协调比单个网站加载速度快许多 一、图片单域名加载设置上传文件路径和域名 以下代码添加在主题目录:fu…

C# WPF上位机开发(开篇)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 之前很少用到c#语言,大部分时间都用c/c,主要是它可以兼顾上位机qt开发以及嵌入式开发。所以,用c/c是比较合理的…

U-boot(五):启动内核

本文主要探讨210的uboot启动内核过程。 嵌入式系统状态启动 未上电时bootloader、kernel、rootfs以镜像形式存储在启动介质中(X210为iNand/SD卡),运行时搬运到DDR中 未上电时u-boot.bin,zImage,rootfs在SD卡中各自对应的分区中,启动时去对应分区寻找(分区表一…

使用STM32与MFRC522 IC进行RFID卡的读取与识别(含代码)

利用STM32与MFRC522 IC进行RFID卡的读取和识别,可以实现对RFID卡的读取和获取卡片标识信息。MFRC522 IC是一种高集成度的13.56MHz RFID芯片,常用于门禁系统、物流跟踪和智能支付等领域。下面将介绍如何使用STM32与MFRC522 IC进行RFID卡的读取和识别&…

光线追踪-Peter Shirley的RayTracingInOneWeekend系列教程(book1-book3)代码分章节整理

自己码完了一遍了,把代码分章节整理了一下,可以按章节独立编译,运行, 也可以直接下载编译好的release版本直接运行。 项目地址: Github: https://github.com/disini/RayTracingInOneWeekendChaptByChapt ​ ​ ​ ​

makefile编写练习

makefile编写练习 OVERVIEW makefile编写练习文件结构直接编译整个项目并运行将项目制作成为静态库将项目制作成为动态库 编写makefile文件来编译带头文件的程序, 文件结构 初始项目文件结构,如下所示: #ifndef ADD_HPP #define ADD_HPPint…

C++前缀和算法:统计美丽子字符串

题目 给你一个字符串 s 和一个正整数 k 。 用 vowels 和 consonants 分别表示字符串中元音字母和辅音字母的数量。 如果某个字符串满足以下条件,则称其为 美丽字符串 : vowels consonants,即元音字母和辅音字母的数量相等。 (vowels * cons…

P18 C++ 继承

目录 前言 01 不使用继承会让你多打很多无用的代码 02 继承 最后的话 前言 本期我们学习 C 面向对象编程中的继承。 面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做&#…

操作系统——解决了我的一些困惑

目录 1、电脑开机做了什么事情 2、真正实现并行的计算机 3、计算机中的淘汰算法 & 分配算法 & 调度算法 & 空间管理 4、什么是虚拟内存?为什么需要虚拟内存?最多可分配多少? 5、TLB(快表)、分页存储&…