首页 > 数据库 >Mysql-慢SQL的处理以及SQL优化

Mysql-慢SQL的处理以及SQL优化

时间:2024-09-05 14:21:04浏览次数:9  
标签:SQL where 使用 查询 索引 Mysql 尽量 优化

前言

开发过程中,从日志或者链路追踪中,我们可以统计和观察到慢SQL的存在,那么慢SQL需要如何去考虑以及修改呢?

考虑:

1、是否使用索引、是否load过多不需要的数据、数据库数据过多
命中索引,尽量使用合适的索引
重写SQL,查询的字段尽量精准,where过滤条件越精准的往前放
清除老数据,优化表结构

2、表结构的修改:
通过添加冗余字段来减少join操作

诚然,对于发现和处理慢SQL是必要的,可以提升系统的效率。但是根本上还是要在日常开发中,注意对于sql的编写。下面我们就来看看都有哪些调优方式,哪些需要注意的点呢?

1、有索引的使用索引
2、尽量确定查询的字段,使用select xxx 替代 select *,尽量查询索引字段-目的是为了减少回表
3、尽量少使用in ,not in,在结果少的情况下会使用索引,结果集超过in/not in的30%就不会使用索引
4、对于like
尽量不使用左模糊,即like ‘%name’ 和 全模糊,因为不会使用索引
5、对于order by
排序字段要么全部正序要么全部倒序排序,否则不会使用索引。
6、尽量不使用!=和<>,因为不会使用索引
7、子查询有些时候可以使用join替代,因为join不需要在内存中创建临时表(子查询会在内存中创建临时表)
8、尽量使用union来替代or,如果使用or查询,那么or左右两边字段必须都是索引而且是单列索引才行
9、隐式类型转换不会使用索引,例如where name =123,其中虽然name建立了索引,但是123因为需要转换为字符串’123’所以不会用到索引
10、where条件的解析是从左到右,从上到下,所以可以将能大幅度过滤数据的条件往前放,减少执行时间
11、如果能确定只有一条数据,那么在select时加上limit 1,这样就会直接返回而不是继续向后查找符合条件的数据
12、尽量避免使用子查询,子查询会生成临时表,临时表不存在索引
13、where条件不要使用函数,会导致无法使用索引

标签:SQL,where,使用,查询,索引,Mysql,尽量,优化
From: https://blog.csdn.net/weixin_43834477/article/details/141853496

相关文章

  • mysql 常用sql
    select@name:=underlineToCamel(t.COLUMN_NAME)'列名',@type:=casewhent.DATA_TYPEin('varchar','char','text','longtext','mediumtext','mediumblob')then......
  • 基于微信小程序+JavaSSM+MySQL的音乐播放器设计与实现 毕业论文+前后端项目源码及数据
    !!!有需要的小伙伴可以通过文章末尾名片咨询我哦!!! ......
  • MySQL(三)操作符 连接操作
    LIKE操作符用于在WHERE子句中搜索列中的指定模式,是进行模糊查询的关键字通常与%和_通配符一起使用SELECTcolumn1,column2,...FROMtable_nameWHEREcolumn_nameLIKEpattern;通配符%:匹配任意字符(包括零个字符)_:匹配单个字符_的用法:使用_通配符找出所有......
  • Sqoop(四)将HDFS上的数据导出到MySQL中
    将HDFS上的数据导出到MySQL中 在MySQL中建表createtableorders(orderidintprimarykey,orderdatevarchar(10),productidint,numint);导出到MySQL中hdfs中准备数据hadoopfs-chmod777/orders/orders/order.txt1,202406,12,300002,202406,13,350003,2024......
  • Python 之SQLAlchemy
    目录SQLAlchemy简明教程表的设计¶常见操作¶常见查询操作¶常见删除操作¶常见更新操作¶常见插入操作¶常见连表查询¶数据库migration¶SQLAlchemy简明教程SQLAlchemy是Python中常用的一个ORM,SQLAlchemy分成三部分:ORM,就是我们用类来表示数据库schema的那部分SQLAlchemyCo......
  • SQL SERVER日常运维(二)
    以下语句请使用SA用户或者有DBA权限的用户进行执行,否则可能会出现权限不足报错。查看当前用户查看当前用户selectsystem_user;检查SQLAgent是否开启IFEXISTS(SELECTTOP11FROMsys.sysprocessesWHEREprogram_name='SQLAgent-GenericRefresher')SELECT'Ru......
  • SQLSERVER建立Oracle Provider for OLE DB操作文档
    1、 下载ODAC-21.7-Xcopy-64-bit,并解压到目录ODAC21.72、 D盘创建目录:Oracle21C3、 CMD转向到目录ODAC21.7,输入【install.batoledbc:\oracleodac】,安装服务4、 系统环境变量中,为Path添加“D:\ Oracle21C;D:\ Oracle21C \bin;”5、 重启计算机,一定要重启6、 SQLS......
  • 20240904_172638 mysql 填空题 存储过程
    创建一个名为p1的存储过程,只写第一行createprocedurep1()存储过程的开始,单词begin存储过程的结束,单词end调用名为p1的存储过程,不传参数callp1()修改每行命令的结束符号,改成$$delimiter$$查看名为p1的存储过程的创建语句showcreateprocedurep1删除名为p1的存储过......
  • SQL SERVER日常运维(一)
    一、基础命令查看当前数据库的版本SELECT@@VERSION;查看服务器部分特殊信息selectSERVERPROPERTY(N'edition')asEdition--数据版本,如企业版、开发版等,SERVERPROPERTY(N'collation')asCollation--数据库字符集,SERVERPROPERTY(N'servername')asServerName--服......
  • 使用电脑需要优化的设置,建议长期保存
    一、桌面-右键-显示设置:  二、点击主页:  找到隐私:    三、后台应用     四、主页-更新与安全-传递优化:   ......