首页 > 数据库 >mysql优化策略

mysql优化策略

时间:2023-03-13 12:11:51浏览次数:33  
标签:策略 s2 key1 sql 索引 mysql 分表 优化

1 看一下能不能加缓存解决,是不是周期性的卡顿,是否需要调整缓存失效策略

2 开启慢查询日志,看看是sql执行的时间长还是sql等待的时间长

查看慢查询日志
set global long_query_time = 1; show global variables like '%long_query_time%'; set long_query_time=1; show variables like '%long_query_time%';
show status like 'slow_queries';

查看 SQL 执行成本
   show variables like 'profiling';    set profiling = 'ON'    show profiles;    explain 工具  EXPLAIN SELECT s1.key1, s2.key1 FROM s1 LEFT JOIN s2 ON s1.key1 = s2.key1 WHERE s2.common_field IS NOT NULL;    SHOW WARNINGS\G      查看sql优化器优化过的执行sql    EXPLAIN SELECT s1.key1, s2.key1 FROM s1 LEFT JOIN s2 ON s1.key1 = s2.key1 WHERE s2.common_field IS NOT NULL;    SHOW WARNINGS\G      分析优化器执行计划:trace    SET optimizer_trace="enabled=on",end_markers_in_json=on;    set optimizer_trace_max_mem_size=1000000;  select * from student where id < 10;  select * from information_schema.optimizer_trace\G    MySQL监控分析视图-sys schema  select * from sys.schema_redundant_indexes;  select * from sys.schema_unused_indexes;  select index_name,rows_selected,rows_inserted,rows_updated,rows_deleted from sys.schema_index_statistics where table_schema='dbname' ;

3 如果是sql等待时间长需要调整服务器参数

 

4 如果是sql执行时间长需要优化索引,sql语句,表结构

1)优化索引优化

1 全值匹配最优
2 最佳左前缀法则
3 主键插入顺序
4 计算、函数、类型转换(自动或手动)导致索引失效
5 类型转换导致索引失效
6 范围条件右边的列索引失效
7 不等于(!= 或者<>)索引失效
8 is null可以使用索引,is not null无法使用索引
9 like以通配符%开头索引失效
10 OR 前后存在非索引的列,索引失效
11 数据库和表的字符集统一使用utf8mb4

2)sql语句优化

外连接和内连接优化
Simple Nested-Loop Join -- join就是一个for循环的过程
Index Nested-Loop Join -- 如果使用索引的话,可以有效的减少内循环次数
Block Nested-Loop Join -- 会把较小的结果集分块儿加载到内存里,减少外循环的读取次数,然后把另一个结果集加载到内存里,减少内循环的读取次数
hash Nested-Loop Join -- 使用hash算法的方式,精确的定位匹配结果
子查询优化
尽量不适用子查询,因为子查询会构建临时表,临时表上没有索引
排序优化
排序有三种方式,1 根据索引 2 单路排序 3 双路排序。优化的时候主要看需要排序的数据量,进行选择。1 最好使用索引 2 最好使用单路 3,数据库内存很小的情况下可以选择双路
分组优化(与排序基本一致)
 包含了order by、group by、distinct这些查询的语句,where条件过滤出来的结果集请保持在1000行以内,否则SQL会很慢
分页优化
select * from student 20000,10
select * from student where id >200000 limit 10 --效果要好于直接分页

 

3)表结构优化

拆分表:冷热数据分离
增加中间表
增加冗余字段
优化数据类型
优化插入记录的速度
使用非空约束
分析表、检查表与优化表

5 分库分表 读写分离

分库分表的方式在生产中通常包括:垂直分库、垂直分表、水平分库和水平分表四种。

垂直分表: 例如将学生信息分为学生基本信息和学生描述信息两张表
垂直分库: 例如将学生信息和学生成绩分到不同的数据库
水平分表: 例如将学生信息表按照奇数和偶数分到分到两张表里
水平分库: 例如将水平分表中分好的两张表存到不同的数据库中

标签:策略,s2,key1,sql,索引,mysql,分表,优化
From: https://www.cnblogs.com/yahe/p/17207067.html

相关文章

  • 非线性优化问题基本形式概述
    非线性优化问题以及在视觉SLAM中的应用1.0最小二乘基础概念定义\(\quad\)找到一个n维的变量\(\mathbf{x}^{*}\in\mathbb{R}^{n}\),使得损失函数\(F(\ma......
  • 7.mysql定时删除60天前的数据
    1.查看even_schedule是否开启,如果没开启,使用下面命令开启,阿里云服务器需要在管理后台开启SETGLOBALevent_scheduler=ON; 2.创建PROCEDURE存储过程DROPPROCEDUREIF......
  • vue常见的优化手段
    前提:永远不要过早地优化,仅在影响运行、卡的不行的时候才优化[参考]代价:代码会变得难以阅读,开发难度增大使用key对于通过循环生成的列表,应给每个列表项一个稳定且唯一......
  • MySQL模糊查询like优化方案
    索引失效的解决方案在MySQL中,模糊查询肯定要使用LIKE关键字,然后再加%,是代表前模糊还是后模糊。数据量小的情况下,不容易看出查询的效率,但是数据量达到百万级,千万级甚......
  • 傻瓜式Java操作MySQL数据库备份(使用mysqldump命令)
    傻瓜式Java操作MySQL数据库备份(使用mysqldump命令)注释都是由chatGPT生成,有什么问题可以评论交流@Value("${backup.sql.database}")privateStringdatabases;......
  • [docker] 腾讯云启用 mysql 容器
    dockerrun-itd--namemysql-p3306:3306-eMYSQL_ROOT_PASSWORD=123456mysql:5.7参数说明:-p3306:3306:映射容器服务的3306端口到宿主机的3306端口,外部主机可......
  • 系统性能优化十大绝招
    上篇 引言:取与舍 软件设计开发某种意义上是“取”与“舍”的艺术。 关于性能方面,就像建筑设计成抗震9度需要额外的成本一样,高性能软件系统也意味......
  • linux中mysql8重置root密码
    修改my.cnf,修改参数,使登录能够跳过密码验证servicemysqldrestart,重启mysqld服务mysql-uxxx-p,任意账号无密码可进入重置root密码为空quit;修改my.cnf,删除跳过验证......
  • mysql elt interval函数区间统计
    引言 在实际的业务统计需求中有时往往需要对区间进行分组统计查询,如分数区间,工资区间查询统计等!mysql中可以利用elt函数来实现此类需求!接下来看如下时间业务需求:......
  • MySQL学习笔记-事务
    事务事务:是一组操作的集合,是一个不可分割的工作单位,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败(当操作中某一步出现......