MySQL数据库4种常用优化方式,sql语句书写优化规范

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL数据库4种常用优化方式,sql语句书写优化规范

引言

实际项目中,我们的数据往往存储在数据库中,但是由于数据库本身是持久化存储,数据的查询速度受到磁盘IO瓶颈的限制,同时,随着数据量的增长,数据的查询也会因为单表数据量的巨大,影响查询速度。所以我们需要对数据库进行优化,提高系统的响应效率。

数据库优化手段

  1. 索引优化。
  2. 添加查询缓存。
  3. 优化数据库SQL语句
  4. 数据库Cluster(搭建数据库集群环境)。

优化储备知识

3.1 慢查询

慢查询就是查看我们每条sql语句查询所用的时间,

开启慢查询的目的是将我们每次查询所用的时间记录在日志里进行观察检测,如果检测到查询的时间到达超过一定的预定时间(比如查询时间超过1秒的语句),将被记录下来进行优化!

  1. 查看慢查询的信息状态

show variables like ‘%quer%’;

  1. 开启慢查询

set global slow_query_log=on;

  1. 修改慢查询最短时间为1s

set GLOBAL long_query_time = 1;

  1. 查看MySQL执行过的慢查询SQL语句。

3.2 执行计划

补充: 数据库查询优化中需要了解MySQL执行计划命令,查看sql的执行效率

进行一条查询语句,点下左上角的解释看语句解释:

索引优化

4.1 索引语法

  1. 索引的作用

加快以索引字段为条件的查询效率。

  1. 创建索引

create index 索引名字 on 表(字段)

  1. 删除索引

drop index 索引名字

  1. 查询某张表创建了哪些索引

Show index from 表名;

索引的特点

①索引会占用存储空间,虽然比较少,但是也占用了。


②MySQL会自动为primary 主键列和unique 唯一列自动增加索引。


③MySQL数据库对数据做DML操作时,需要同时做维护索引的操作。


隐含之意,就是索引会降低数据库增删改的效率。

  1. 使用原则:

一般会对sql中的where条件字段或者order by字段建立索引。

4.2 索引应用场景

实际项目中,如果从业务角度出发,发现经常会用到某个字段,对表数据进行查询,或者根据经常用到某个字段的排序,则该数据是需要增加索引的。

查询缓存

  1. 在数据库操作对象DAO处增加查询缓存。

参考Ehcache缓存,或者MyBatis+Ehcache整合方案、Hibernate二级缓存Ehcache。

  1. 需要注意的问题是,要注意数据的一致性,所以缓存思路如下:

① 只对查询结果进行缓存

缓存结果存放要以业务逻辑相关为划分单位。比如,如果是单表,则可以创建一个缓存区域,与该表对应,如果业务中涉及到表连接操作,要将查询结果缓存在这多张表的查询结果都要缓存在对应的一个缓存区域中。

  1. 当执行增删改的时候,为了避免出现脏数据。
  2. 基于以上的特点,缓存原则是对那些查询需求远大于增删改需求的数据,进行缓存。

例如:新闻网站的首页数据、电商的类别数据等。

SQL优化

尽量不要在要给在SQL语句的where子句中使用函数,这样会使索引失效。


如果已经确定查询结果只有一条数据(当表中数据的该字段是唯一的),在查询SQL末尾增加

limit 1,这样MySQL的查询执行引擎在找到1条数据之后就会停止搜索,提高效率。(mysql5.6之后有效)

例如:


select * from t_department where department_name = ‘研发部’ limit 1;


模糊查询尽量使用右模糊:‘xx%’,这样可以利用上索引,而使用‘%xx’这种模糊查询会导致该查询字段上的索引失效。


如果非要使用表连接,最好要保证连接的两个字段都是创建了索引的。


查询的时候最好用什么数据查询什么数据,避免使用select

*,原因是数据库访问往往是远程通过网络来访问,这也就意味着,查询结果也是通过网络来传输的,如果查询了额外的无用的数据,他们会额外占用网络带宽,数据传输效率也会降低。


尽量使用非空 not

null,可以使用‘’空串代替null。因为‘’不占用空间,null会占用空间的。


使用!= 或者<> 数据库会放弃索引。

  1. 在SQL语句中不要有运算,否则MySQL会放弃索引。(mysql在执行查询时,会自动过滤当前语句,当效率大于使用索引时,则默认不使用索引)

1.对于百万级以上的表数据,如果要做表连接查询,一定要对表先分页,然后对分页结果再做表连接。


2.尽量避免大事务操作,这样会降低系统的并发能力。在满足实际业务的前提下,尽量缩短事务的边界。


3.Where子句多条件and连接的情况,要把精确条件放在最先执行的位置,提高效率。Oracle中是从右至左。MySQL中是从左至右。

MySql集群环境之------读写分离、主从复制

搭建MySQL的集群环境来优化查询

详细的使用搭建步骤可参考我之前文章:

Centos 7使用MyCat搭建 MySQL-读写分离

Centos 7搭建MySQL-主从复制

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
17天前
|
SQL 关系型数据库 MySQL
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
35 9
|
16天前
|
SQL 数据库
数据库数据恢复—SQL Server报错“错误 823”的数据恢复案例
SQL Server数据库附加数据库过程中比较常见的报错是“错误 823”,附加数据库失败。 如果数据库有备份则只需还原备份即可。但是如果没有备份,备份时间太久,或者其他原因导致备份不可用,那么就需要通过专业手段对数据库进行数据恢复。
|
17天前
|
关系型数据库 数据库 数据安全/隐私保护
云数据库实战:基于阿里云RDS的Python应用开发与优化
在互联网时代,数据驱动的应用已成为企业竞争力的核心。阿里云RDS为开发者提供稳定高效的数据库托管服务,支持多种数据库引擎,具备自动化管理、高可用性和弹性扩展等优势。本文通过Python应用案例,从零开始搭建基于阿里云RDS的数据库应用,详细演示连接、CRUD操作及性能优化与安全管理实践,帮助读者快速上手并提升应用性能。
|
17天前
|
SQL 存储 缓存
MySQL的架构与SQL语句执行过程
MySQL架构分为Server层和存储引擎层,具有高度灵活性和可扩展性。Server层包括连接器、查询缓存(MySQL 8.0已移除)、分析器、优化器和执行器,负责处理SQL语句;存储引擎层负责数据的存储和读取,常见引擎有InnoDB、MyISAM和Memory。SQL执行过程涉及连接、解析、优化、执行和结果返回等步骤,本文详细讲解了一条SQL语句的完整执行过程。
37 3
|
24天前
|
SQL Oracle 关系型数据库
【YashanDB 知识库】如何将 mysql 含有 group by 的 SQL 转换成崖山支持的 SQL
在崖山数据库中执行某些 SQL 语句时出现报错(YAS-04316 not a single-group group function),而这些语句在 MySQL 中能成功执行。原因是崖山遵循 SQL-92 标准,不允许选择列表中包含未在 GROUP BY 子句中指定的非聚合列,而 MySQL 默认允许这种操作。解决办法包括:使用聚合函数处理非聚合列或拆分查询为两层,先进行 GROUP BY 再排序。总结来说,SQL-92 更严格,确保数据一致性,MySQL 在 5.7 及以上版本也默认遵循此标准。
|
1月前
|
SQL 存储 关系型数据库
【SQL技术】不同数据库引擎 SQL 优化方案剖析
不同数据库系统(MySQL、PostgreSQL、Doris、Hive)的SQL优化策略。存储引擎特点、SQL执行流程及常见操作(如条件查询、排序、聚合函数)的优化方法。针对各数据库,索引使用、分区裁剪、谓词下推等技术,并提供了具体的SQL示例。通用的SQL调优技巧,如避免使用`COUNT(DISTINCT)`、减少小文件问题、慎重使用`SELECT *`等。通过合理选择和应用这些优化策略,可以显著提升数据库查询性能和系统稳定性。
87 9
|
1月前
|
SQL 存储 关系型数据库
MySQL原理简介—10.SQL语句和执行计划
本文介绍了MySQL执行计划的相关概念及其优化方法。首先解释了什么是执行计划,它是SQL语句在查询时如何检索、筛选和排序数据的过程。接着详细描述了执行计划中常见的访问类型,如const、ref、range、index和all等,并分析了它们的性能特点。文中还探讨了多表关联查询的原理及优化策略,包括驱动表和被驱动表的选择。此外,文章讨论了全表扫描和索引的成本计算方法,以及MySQL如何通过成本估算选择最优执行计划。最后,介绍了explain命令的各个参数含义,帮助理解查询优化器的工作机制。通过这些内容,读者可以更好地理解和优化SQL查询性能。
|
3月前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
SQL 存储 关系型数据库
MySQL下使用SQL命令进行表结构与数据复制实践
MySQL下使用SQL命令进行表结构与数据复制实践
177 0
|
SQL 关系型数据库 MySQL
MySQl数据库第八课-------SQL命令查询-------主要命脉2
MySQl数据库第八课-------SQL命令查询-------主要命脉
105 0

热门文章

最新文章