mysql数据库优化之表的设计和慢查询定位

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 一、数据库优化包括的方面数据库优化是一种综合性的技术,并不是通过某一种方式让数据库效率提高很多,而是通过多方面的提高,从而使得数据库性能提高。 主要包括: 1、表的设计合理化(3范式) 2、给表添加合适的索引,如何使用索引 3、分表技术(水平分割、垂直分割) 4、定时清除数据垃圾,定时碎片整理 5、多用存储过程和触发器 6、对mysql配置进行优化 7、读写分离 8、my
一、数据库优化包括的方面
数据库优化是一种综合性的技术,并不是通过某一种方式让数据库效率提高很多,而是通过多方面的提高,从而使得数据库性能提高。
主要包括:
1、表的设计合理化(3范式)
2、给表添加合适的索引,如何使用索引
3、分表技术(水平分割、垂直分割)
4、定时清除数据垃圾,定时碎片整理
5、多用存储过程和触发器
6、对mysql配置进行优化
7、读写分离
8、mysql服务器硬件升级。


二、数据库的设计
步骤:
1、收集信息:与该系统有关人员进行交流,充分了解数据库需要完成的任务
 
2、标识实体:具体存在的对象,名词。
比如:用户、帖子、回帖、板块

3、标识属性


4、标识关系:
  1)一对一:两个表的主键是公共字段
  2)一对多:主键和非主键建关系
  3)多对一:非主键和主键建关系
  4)多对多:非主键和非主键建关系
5、将E-R图转成表
  1)将实体转成表,将属性转成字段
  2)如果找不到一个合适的字段做主键,我们添加一个自动增长列做主键。
  3)建立正确的关系


三、数据规范化


表设计出来以后,并不是最合理的结构,我们需要对表进行规范化(我们通过3范式来对表进行规范化)
先满足第一范式--再满足第二范式--再满足第三范式


1NF: 确保每列的原子性
     第一范式用来规范化所有的字段,所有的字段都不可再分

注意:比如地址这个字段,如果不分类汇总、不排序,仅仅起一个字符串的作用,这时我们不拆(反3范式)


2NF: 非键字段必须依赖于主键字段

如果一个关系满足1NF,并且除了主键以外其他列都依赖于该主键,则满足第二范式(2NF)


3NF: 消除传递依赖

在非主键字段中,如果一个字段可以推导另一个字段,这就叫传递依赖。


四、规范化和性能的关系

1、为了满足某种商业目标,数据库性能比规范化数据库更重要

通过对给定的表中添加额外的字段,以大量减少需要从中搜索信息所需要的时间。

通过在给定的表中插入计算列(比如成绩总分),以方便查询

2、进行规范化的同时需要考虑数据库的性能


五、定位慢查询

找出查询速度较慢的SQL语句。

增、删、改、查

其中查询占90%,增删改共占10%

Mysql数据库一些关于状态的查询

用"show status"           

指令                                                                  说明

show status                                                   查询mysql数据库的一些运行状态

show status like 'com_insert';                    显示执行了多少次插入操作

show status like 'com_update';                 显示执行了多少次更新操作

show status like 'com_delete';                    显示执行了多少次删除操作

show status like 'com_select';                    显示执行了多少次查询操作

show status like 'uptime';                             显示mysql启动了多长时间,如果时间很长了,数据库表的存储引擎有的是myisam,这时候注意要碎片整理。


show [session | global ] status like...,如果不写,默认是会话级(session),想要查询从mysql启动一直到现在,用global。


显示慢查询

show variables like 'long_query_time'         显示慢查询的时间,默认是10秒

set long_query_time=0.5                               把慢查询的时间设置为0.5秒,以便于测试

show status like 'slow_queries'         显示慢查询的时间,默认是10秒


定位慢查询(开启慢查询日志)

一旦开启慢查询日志以后,日志文件的位置在my.ini文件中去查找,默认情况下mysql不会记录慢查询


如何开启慢查询:

1、关闭当前mysql服务:net stop mysql

2、通过安全模式启动就会写日志。

3、关闭安全模式启动的mysql

4、把慢查询的时间设置为0.5秒,set long_query_time=0.5       

5、select * from table where xx='00' ;

6、到慢查询日志中去找对应的SQL语句。


反三范式:

范式越高。数据冗余就越少,但是有时就效率就越低下,为了提高运行效率,可以适当的让数据冗余。









相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
24天前
|
SQL 关系型数据库 MySQL
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
MySQL慢查询优化、索引优化,是必知必备,大厂面试高频,本文深入详解,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
|
28天前
|
SQL 关系型数据库 MySQL
MySQL慢查询优化、索引优化、以及表等优化详解
本文详细介绍了MySQL优化方案,包括索引优化、SQL慢查询优化和数据库表优化,帮助提升数据库性能。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
MySQL慢查询优化、索引优化、以及表等优化详解
|
14天前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
14天前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
17天前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
22 2
|
28天前
|
存储 NoSQL 分布式数据库
微服务架构下的数据库设计与优化策略####
本文深入探讨了在微服务架构下,如何进行高效的数据库设计与优化,以确保系统的可扩展性、低延迟与高并发处理能力。不同于传统单一数据库模式,微服务架构要求更细粒度的服务划分,这对数据库设计提出了新的挑战。本文将从数据库分片、复制、事务管理及性能调优等方面阐述最佳实践,旨在为开发者提供一套系统性的解决方案框架。 ####
|
29天前
|
存储 SQL 数据库
深入浅出后端开发之数据库优化实战
【10月更文挑战第35天】在软件开发的世界里,数据库性能直接关系到应用的响应速度和用户体验。本文将带你了解如何通过合理的索引设计、查询优化以及恰当的数据存储策略来提升数据库性能。我们将一起探索这些技巧背后的原理,并通过实际案例感受优化带来的显著效果。
41 4
|
1月前
|
SQL druid 数据库
如何进行数据库连接池的参数优化?
数据库连接池参数优化包括:1) 确定合适的初始连接数,考虑数据库规模和应用需求;2) 调整最大连接数,依据并发量和资源状况;3) 设置最小空闲连接数,平衡资源利用和响应速度;4) 优化连接超时时间,确保系统响应和资源利用合理;5) 配置连接有效性检测,定期检查连接状态;6) 调整空闲连接回收时间,适应访问模式并配合数据库超时设置。
|
1月前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
72 3
|
1月前
|
SQL 缓存 监控
数据库优化
【10月更文挑战第29天】数据库优化
36 1