首页 > 数据库 >MySQL调优指南及高级SQL技巧

MySQL调优指南及高级SQL技巧

时间:2024-10-10 16:21:06浏览次数:3  
标签:MySQL 查询 索引 调优 SQL 失效 尽量

知识背景:

相信大家在面试的时候都会遇到关于mysql调优的问题,这已经是必问的一环节了,特此在这边简单记录一些关于mysql调优的知识点,希望对大家有帮助!

总体介绍:

MySQL调优主要分为三个步骤:监控报警、 排查慢SQL、MySQL调优。

监控报警:

使用工具(如Prometheus+Grafana)监控MySQL,发现查询性能变慢时,及时报警提醒运维人员。

排查慢SQL:

EXPLAIN命令定位执行慢的语句,主要关注字段:

  • possible_keys:查询可能用到的索引
  • key:实际使用的索引
  • key_len:实际使用的索引的字节数长度。
  • type:访问类型,看有没有走索引。all(全表扫描),ref(命中非唯一索引),const(命中主键/唯一索引)、range(范围索引查询)、index_merge(使用多个索引)、 system(一行记录时,快速查询)。

MySQL调优:

程序配置层面:

my.cnf 比如最大连接数就可以在这里去修改

binlog日志默认不开启 我们可以手动开启

架构设计层面:

搭建mysql主从集群,读写分离设计,引入分库分表,引入缓存数据库redis

sql执行层面:

  • 比如尽量避免在字段开头加模糊查询
  • 尽量不用in not in 用between
  • 尽量不用or 用union UNION 操作符在合并结果集时会去除重复行,而 UNION ALL 不会去除重复行
  • 尽量不用null 用0代替
  • 尽量不用where 1=1
  • 尽可能避免全盘扫描 比如查询数据的时候尽量不用*
  • 减少无效数据的查询

索引优化方面:

  • 尽量全值匹配:全值匹配指的是查询条件完全匹配索引中的所有列。例如,如果一个索引包含列 A 和 B,那么查询条件应该包括这两个列才能完全匹配这个索引。
  • 计算、函数导致索引失效:计算例如where num+1=2,函数例如abs(num)取绝对值
  • 类型转换导致索引失效:例如name=123,而不是name='123'。又例如使用了不同字符集。
  • 范围条件右边的列索引失效:例如(a,b,c)联合索引,查询条件a,b,c,如果b使用了范围查询,那么b右边的c索引失效。建议把需要范围查询的字段放在最后。范围包括:(<) (<=) (>) (>=) 和 between
  • “OR”前后存在非索引列,导致索引失效:MySQL里,即使or左边条件满足,右边条件依然要进行判断

大功告成!这些在面试的时候应该够用了,再详细的可以参考这位大佬的。【MySQL调优】如何进行MySQL调优?一篇文章就够了!-CSDN博客

结语:

请你努力,为了你自己。              --《人民日报》

标签:MySQL,查询,索引,调优,SQL,失效,尽量
From: https://blog.csdn.net/TFHoney/article/details/142822753

相关文章

  • sqlserver 查询数据表
    1. 如何获取所有架构及其包含的数据表名称 SELECTs.nameAS架构名称,t.nameAS数据表名称FROMsys.schemassINNERJOINsys.tablestONs.schema_id=t.schema_idORDERBYs.name,t.name; 在这个查询中:sys.schema......
  • SQL专项练习第二天
            在数据处理和分析中,Hive是一个强大的工具。本文将通过五个Hive相关的问题展示其在不同场景下的应用技巧。        先在home文件夹下建一个hivedata文件夹,把我们所需的数据写成txt文件导入到/home/hivedata/文件夹下面。一、找出连续活跃3天及以......
  • SQL专项练习第六天
            Hive在处理不同数据需求时的灵活性和强大功能,包括间隔连续问题的处理、行列转换、交易数据查询、用户登录统计以及专利数据分析等方面。本文将介绍五个Hive数据处理问题的解决方案,并通过实际案例进行演示。        先在home文件夹下建一个hivedata......
  • [问题记录]SQLserver数据库是否可以新建多个.mdf文件?
    结论:1.可以,但只有第一个(.mdf)为当前数据库主文件。2.当有多个(.mdf)文件时,语句不会出现错误,但不符合命名约定,即命名约定不正确。3.数据库扩展名可以任意,官方文档中推荐主数据文件使用(.mdf),辅数据文件使用(.ndf),但如果使用例如:(.abc)作为文件后缀名,也是正确的。(具体官方文件截......
  • 安装了sqlite3依赖,编译源码报No package 'sqlite3' found
    如果已经安装了SQLite3.44.0,但在运行./configure时仍然出现“Nopackage'sqlite3'found”的错误,这通常是因为pkg-config没有找到相应的SQLite开发文件(.pc文件)。可按照以下步骤检查和修复此问题:1.确保pkg-config已安装首先,确认系统上安装了pkg-config工具:sudoyuminstall......
  • 防止SQL攻击详解
    防止SQL注入攻击是保护数据库安全的重要一环。以下是一些有效的措施来防范SQL注入攻击:使用参数化查询或预编译语句:这是最推荐的方法,通过使用参数化查询(也称为预编译语句),可以确保用户输入的数据不会被解释为SQL代码。在大多数现代编程语言和数据库驱动程序中都支持这种方法。......
  • MSSQL-从字符串转换日期和/或时间时,转换失败
    1、报错的sql为:selectID,Test_timeas时间,fromProcessDatawhereconvert(datetime,test_time,120)betweenconvert(datetime,'2020-10-10',120)andconvert(datetime,'2024-10-11',120)   它是将Test_time转化为datetime格式,再用between进行比较;......
  • Mysql锁机制浅谈一
    mysql是如何加锁的?加锁默认是加临键锁,有特殊情况会优化为其他锁索引上的等值查询:唯一索引,给不存在的记录加锁时,优化为间隙锁普通索引,向右遍历至最后一个不满足查询条件的值时吗退化为间隙锁索引上的范围查询:唯一索引:访问到不满足条件的第一个值为止主键索引ps:如果是......
  • SQL server 存储过程与函数
    一、SQL的存储过程:存储过程其实就是一系列SQL语句的集合体,我们可以理解为一个封装单元,这个单元可以有出入参数,也可以没有。我们举几个简单的例子:(1)无入参无出参的存储过程:createprocusp_testasupdatestusetssex='0'wheressex=''returnexecusp_test(2)无入......
  • SQL Server 基础查询语句
    摘要在SQLServer中,查询语句是数据库管理员和开发人员最常用的工具之一,用于从数据库中提取、筛选和排序数据。以下是一些SQLServer查询语句的详细说明和示例:1、SELECT语句:这是最基本的查询语句,用于从一个或多个表中选择数据。例如,SELECT*FROMtable_name;将返回表中......