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.mzph.cn/news/170722.shtml

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

相关文章

04 _ 系统设计目标(二):系统怎样做到高可用?

这里将探讨高并发系统设计的第二个目标——高可用性。 高可用性(High Availability,HA)是你在系统设计时经常会听到的一个名词,它指的是系统具备较高的无故障运行的能力。 我们在很多开源组件的文档中看到的HA方案就是提升组件可…

调试器gdb

目录 一、调试 1、前言 2、 debug和release 二、基本操作 1、退出 quit 2、开始调试 r 3、打断点 b 4、查看断点 info b 5、查看代码 l 6、删除断点 d 7、逐过程 n 8、打印变量内容 p 9、逐语句(进入函数) s 10、查看函数调用堆栈 bt 11、…

linux rpm安装软件卸载 以卸载mysql为例

查看rpm包 rpm -qa | grep 内容 卸载rpm rpm -e --nodeps rpm名称

【Unity实战】切换场景加载进度和如何在后台异步加载具有庞大世界的游戏场景,实现无缝衔接(附项目源码)

文章目录 最终效果前言一、绘制不同的场景二、切换场景加载进度1. 简单实现2. 优化 三、角色移动和跳跃控制四、添加虚拟摄像机五、触发器动态加载场景六、最终效果参考源码完结 最终效果 前言 观看本文后,我的希望你对unity场景管理有更好的理解,并且能…

辅助驾驶功能开发-外部需求篇-导航式巡航辅助NCA外部依赖及需求

1.功能外部依赖 为了设计满足用户需求的 ICA/NCA 系统,需要用到的系统输入为:环境及驾驶员感知信息、 门锁监测信息、胎压监测信息、驾驶员权限管理、车辆模式管理信息、用户请求输入、转向系统 信息、惯性及导航定位信息、被动安全及约束信息、变速箱系统信息、制动系…

华为云之在Linux系统下安装可视化界面

华为云之在Linux系统下安装可视化界面 一、华为云弹性云服务器ECS介绍二、Linux图形化界面介绍三、本次实践介绍3.1 本次实践简介3.2 本次实践环境介绍 四、环境准备工作4.1 预置环境4.2 查看预置环境资源信息 五、连接弹性云服务器ECS5.1 登录华为云5.2 复制ECS弹性公网IP地址…

云计算学习哪些技术

1. 虚拟化技术 虚拟化是云计算的基础,因此了解虚拟化技术至关重要。学习虚拟化技术时,需要掌握以下知识点: - 操作系统虚拟化:了解基于宿主机和客户机的虚拟化技术,如VMware、Hyper-V等。 - 容器化技术:学习…

php的字符转义函数有那些,是干什么的

在 PHP 中,字符转义函数是用于处理字符串中的特殊字符,以防止这些字符被误解、滥用或引起安全问题的一组函数。这些函数的主要作用是确保在将用户提供的数据插入到数据库、构建 HTML 输出或进行其他与安全相关的操作时,不会导致潜在的安全漏洞…

人工智能 -- 神经网络

1、什么是神经网络 什么是人工智能?通俗来讲,就是让机器能像人一样思考。这个无需解释太多,因为通过各种科幻电影我们已经对人工智能很熟悉了。大家现在感兴趣的应该是——如何实现人工智能? 从1956年夏季首次提出“人工智能”这…

leetcode设计循环队列(链表方式来实现)

上次我们那个设计循环队列的时候用的是数组,因为那个时候还是不太会链表,现在有了链表的思路,我们一起来看看解题步骤吧。 https://leetcode.cn/problems/design-circular-queue/description/ 设计循环队列 那我们其实最主要的就是我们这个…

SpringBoot——配置及原理

优质博文:IT-BLOG-CN 一、Spring Boot全局配置文件 application.properties与application.yml配置文件的作用:可以覆盖SpringBoot配置的默认值。 ◀ YML(is not a Markup Language:不仅仅是一个标记语言)&#xff1…

centos 7.9 下利用miniconda里的pyinstaller打包python程序为二进制文件操作方法

centos 7.9 下利用miniconda里的pyinstaller打包python程序为二进制文件操作方法 一.centos 7.9 操作系统安装 参考:https://blog.csdn.net/qq_46015509/article/details/134572030?utm_sourceminiapp_weixin 安装完成后用后台连接工具连上虚拟机 二.安装python3 …

蓝桥杯第2119题 特殊时间 C++ 思维暴力

题目 思路和解题方法 1110 代表 1110年11月10号11点10分1110 4*4*4 有0111 1011 1101 1110 可以符合年 月日 时分秒的都有4种例如 1113有1113 1131 1311 3111 年份符合月日只有11 13 时分秒 只有11 13 11 31 13 11 无31 11 c 代码 #include <bits/stdc.h> using…

Linux进程管理,用户管理,文件压缩命令

gcc与g区别(补充了解): 比如有两个文件:main.c,mainc.cpp(分别用C语言和C语言写的)如果要用gcc编译呢? gcc -o mainc main.c gcc -o mainc mainc.cpp -lstdc 指明用c的标准库; 区别一: gcc默认只链接C库,并不会链接C的库;g会默认链接c标准库. 区别二: gcc编译.c文件,则按照C语…

【开源组件】- 关于Jetcache的使用

关于Jetcache的使用 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f31d;分享学习心得&#xff0c;欢迎指正&#xff0c;大家一起学习成长&#xff01; JetCache是由…

K8s 中 Pod OOMKilled 原因

目录 Exit Code 137 解决方案 JVM 感知 cgroup 限制 使用 JDK9 的容器感知机制尝试 问题分析 容器内部感知 CGroup 资源限制 在 Java10 中&#xff0c;改进了容器集成 JVM 参数 MaxDirectMemorySize -XX:MaxDirectMemorySize 的默认值是什么&#xff1f; 其他获取 ma…

电源控制系统架构(PCSA)之电源管理基础设施组件

目录 6.5 电源管理基础设施组件 6.5.1 电源策略单元 6.5.2 时钟控制器 6.5.3 低功耗Distributor 6.5.4 低功耗Combiner 6.5.5 P-Channel到Q-Channel转换器 6.5 电源管理基础设施组件 6.5.1 电源策略单元 本节介绍电源策略单元(Power Policy Unit, PPU)。PPU的完整细节见…

Java核心知识点整理大全14-笔记

Java核心知识点整理大全-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全2-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全3-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全4-笔记-CSDN博客 Java核心知识点整理大全5-笔记-CSDN博客 Java核心知识点整理大全6…

CSS特效019:图标图片悬浮旋转一周

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS…