看完这一篇,别在说你学过MySQL了(七)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 大家好,我是Leo。目前在常州从事Java后端开发的工作。这篇是MySQL学习整理系列总结篇。这个系列会与字节,网易,阿里,腾讯,美团,快手的相关朋友一起整理输出。希望帮助更多的朋友早日入大厂!

21. 系统每天早上重启一下,不然就提示连接数据库失败


22. count(*) 那些问题你了解吗


23. 大数据表你是如何操作的


## 24. 线上故障排查思路

  1. 首先检查服务器上最大的CPU耗用,内存占用等线程问题。如果是Java的tomcat或者数据库服务。
  2. 先检查Tomcat的日志文件,锁定是Java代码问题还是数据库的服务问题
  3. 如果是Java问题那么就可以直接锁定Tomcat日志了
  4. 如果是数据库的服务问题那么就可以把主要精力锁定在数据库上了
  5. 我们继续第三步扩展一下,找到Tomcat内日志的详细信息进行锁定更小范围性的查询。
  6. 继续第四步扩展一下,锁定到数据库上的话还是比较麻烦的,我们首先看看有没有死锁,大事务,耗时SQL,慢查询日志信息寻找是否这些原因导致数据库宕机等问题

以上内容是公司这边出问题了,我接触到的一些浅的知识,后续将继续维护更新!


25. 如何快速的复制一张表


26. 要不要使用分区表


27. insert语句锁怎么那么多


28. 29条SQL语句性能调优方案

  • 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
  • 应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认值。
  • 应尽量避免在 where 子句中使用!=或<>操作符, MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。
  • 应尽量避免在 where 子句中使用 or 来连接条件, 否则将导致引擎放弃使用索引而进行全表扫描, 可以 使用UNION合并查询:select id from t where num=10 union all select id from t where num=20
  • in 和 not in 也要慎用,否则会导致全表扫描,对于连续的数值,能用 between 就不要用 in 了:Select id from t where num between 1 and 3
  • 如果在 where 子句中使用参数,也会导致全表扫描。
  • 应尽量避免在 where 子句中对字段进行表达式操作,应尽量避免在where子句中对字段进行函数操作
  • 索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。
  • 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。
  • 尽可能的使用 varchar/nvarchar 代替 char/nchar , 因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。
  • 最好不要使用”“返回所有:select from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。
  • 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
  • 使用表的别名(Alias):当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。
  • 使用“临时表”暂存中间结果,简化SQL语句的重要方法就是采用临时表暂存中间结果,但是,临时表的好处远远不止这些,将临时结果暂存在临时表,后面的查询就在tempdb中了,这可以避免程序中多次扫描主表,也大大减少了程序执行中“共享锁”阻塞“更新锁”,减少了阻塞,提高了并发性能。
  • 常见的简化规则如下:不要有超过5个以上的表连接(JOIN),考虑使用临时表或表变量存放中间结果。少用子查询,视图嵌套不要过深,一般视图嵌套不要超过2个为宜。
  • 用OR的字句可以分解成多个查询,并且通过UNION 连接多个查询。他们的速度只同是否使用索引有关,如果查询需要用到联合索引,用UNION all执行的效率更高.多个OR的字句没有用到索引,改写成UNION的形式再试图与索引匹配。一个关键的问题是否用到索引。
  • 在IN后面值的列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,减少判断的次数。
  • 尽量将数据的处理工作放在服务器上,减少网络的开销,如使用存储过程。存储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中的SQL语句,是控制流语言的集合,速度当然快。反复执行的动态SQL,可以使用临时存储过程,该过程(临时表)被放在Tempdb中。
  • 当服务器的内存够多时,配制线程数量 = 最大连接数+5,这样能发挥最大的效率;否则使用 配制线程数量<最大连接数启用SQL SERVER的线程池来解决,如果还是数量 = 最大连接数+5,严重的损害服务器的性能。
  • 尽量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率。
  • 当有一批处理的插入或更新时,用批量插入或批量更新,绝不会一条条记录的去更新!
  • 在所有的存储过程中,能够用SQL语句的,我绝不会用循环去实现! (例如:列出上个月的每一天,我会用connect by去递归查询一下,绝不会去用循环从上个月第一天到最后一天)
  • sql语句用大写,因为oracle 总是先解析sql语句,把小写的字母转换成大写的再执行。
  • 别名的使用,别名是大型数据库的应用技巧,就是表名、列名在查询中以一个字母为别名,查询速度要比建连接表快1.5倍。
  • 避免使用临时表,除非却有需要,否则应尽量避免使用临时表,相反,可以使用表变量代替;大多数时候(99%),表变量驻扎在内存中,因此速度比临时表更快,临时表驻扎在TempDb数据库中,因此临时表上的操作需要跨数据库通信,速度自然慢。
  • 查询缓冲并不自动处理空格,因此,在写SQL语句时,应尽量减少空格的使用,尤其是在SQL首和尾的空格(因为,查询缓冲并不自动截取首尾空格)。
  • 我们应该为数据库里的每张表都设置一个ID做为其主键,而且最好的是一个INT型的(推荐使用UNSIGNED),并设置上自动增加的AUTO_INCREMENT标志。
  • 当只要一行数据时使用 LIMIT 1
  • 选择合适的索引结构,往往能提升很高的性能。对症下药嘛!


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
关系型数据库 MySQL 数据库
MySQL系列(三)之15道常见笔试题
MySQL系列(三)之15道常见笔试题
|
1月前
|
存储 Oracle 关系型数据库
[MySQL]知识点
本文详细介绍了MySQL中int族和char族数据类型的特点、存储范围及使用建议,以及text、blob类型和内置字符处理函数。文章强调了数据类型选择的重要性,并提供了多个实例帮助理解。
39 0
[MySQL]知识点
|
存储 Oracle 关系型数据库
MYSQL知识点
MYSQL知识点
|
关系型数据库 MySQL
MySQL练习题
MySQL练习题
81 0
|
关系型数据库 MySQL
MySQL 函数详解 - 小白必看(三)
在MySQL中,聚合函数主要由:count,sum,min,max,avg,这些聚合函数我们之前都学过,不再重复。这里我们学习另外一个函数:**group_concat()**,该函数用户实现行的合并。
149 0
MySQL 函数详解 - 小白必看(三)
|
SQL 存储 前端开发
|
SQL 存储 算法
mysql常见知识点
在mysql的学习中,将一些常用的知识点写出来,句句皆干货
136 0
|
存储 SQL 关系型数据库
MySQL部分知识点总结
MySQL部分知识点总结,索引、事务、锁以及优化等
160 0
MySQL部分知识点总结
|
SQL 存储 缓存
看完这一篇,别在说你学过MySQL了(二)
大家好,我是Leo。目前在常州从事Java后端开发的工作。这篇是MySQL学习整理系列的第二篇。这个系列会与字节,网易,阿里,腾讯,美团,快手的相关朋友一起整理输出。希望帮助更多的朋友早日入大厂!
看完这一篇,别在说你学过MySQL了(二)
|
存储 SQL 缓存
看完这一篇,别在说你学过MySQL了
大家好,我是Leo。目前在常州从事Java后端开发的工作。这篇是MySQL学习整理系列的第一篇。这个系列会与字节,网易,阿里,腾讯,美团,快手的相关朋友一起整理输出。希望帮助更多的朋友早日入大厂!
看完这一篇,别在说你学过MySQL了