MySQL——性能优化与关系型数据库

文章目录

什么是性能?

  1. 吞吐与延迟:有些结论是反直觉的,指导我们关注什么。
  2. 没有量化就没有改进:监控与度量指标,指导我们怎么去入手。
  3. 80/20原则:先优化性能瓶颈问题,指导我们如何去优化。
  4. 过早的优化是万恶之源:指导我们要选择优化的时机。
  5. 脱离场景谈性能都是耍流氓:指导我们对性能要求要符合实际,在服务器上运行和在笔记本上运行是不一样的。

在对大多数情况下,我们面对的是一个老的遗留的业务系统。如果对这个老系统进行优化,一般会涉及它的容量,稳定性以及可用性。一般情况,优先考虑的点就是优化数据库相关的性能。也就是下面我们将谈论的内容。

什么是关系型数据库?

?

数据库设计范式

  1. 第一范式:保证属性(列)的原子性,属性不可再分;

比如以学生档案相关属性举例,对应的表包含【学号】。【姓名】、【院系】、【分数】四个属性,其中【院系】不满足原子性,它可再拆分为【院】(计算机学院)、和【系】(自动化、计算机技术、软件工程)这两个属性。

  1. 第二范式:表中不存在与主键部分相关的属性(列);

以学生成绩相关属性举例,对应的表包含【学号】。【姓名】、【课名】、【系名】、【系主任】、【分数】。

其中主键为学号+课名 ,对应关系图如下:

'
(主键为什么不是学号?注意,这里的主键含义是能唯一确定此条记录的属性集合,如果只以学号为主键,结合表中的数据,不能唯一确定分数这一世为什么表不满足第二范式的原因).

'

从上面的关系图中可以看出,姓名,系名以及系主任可以单独被学号确定,即存在属性能被主键部分确定,因此此表不满足第二范式,需要对表进行拆分。

'

此时,拆成两个表,满足第二范式。

  1. 第三范式:属性不存在传递依赖。

意思就是消除表中列不依赖主键,而依赖表中非主键的情况,即没有列属于主键不相关的。上图中以满足第二范式,但【系主任】不依赖于【学号】,因此不满足第三范式。

·

·

此外还有第四范式和第三范式,但用的不多。但是,通常情况下,我们会在主表中加入一些冗余,不必满足这几种范式,不如在主表中加入从表的一些属性,当我们在查询中,只需要的查询主表就足够了,减少表的联合查询,因此在设计数据库的时候,加入一些冗余属性数非常必要的;

常见的数据库

SQL语言

SQL首先实在操作关系型数据库时提出的,但越来越多的实践证明,无论关系型数据库还是其他类型数据库SQL,但凡涉及操作数据领域时,SQL就是最强大,最灵活的实施标准了。

结构化查询语言的六个部分

1. DQL:数据查询语言,用于检索的语言,select 搭配 where、order by、group等等。
2. DML:数据操作语言,用于添加、删除、修改的语言,像insert、update。delete。
3. DDL:数据定义语言,用于的创建、删除、修改表结构的语言,像create、drop、alter。

  1. TCL:事务控制语言,像commit,rollback等。

  2. DCL:数据控制语言,控制用户权限相关语言。

  3. CCL:指针控制语言。

版本

常用的版本为SQL-92和SQL-99,常见的SQL解析器一般表明支持这两种。

MySQL数据库

故事

MySQL有 MySQL AB公司于1995年创立,2008年被Sun公司收购,2009年Sun被Oracle收购。由于担心Oracle对MySQL收费,因此,MySQL AB创始人有开辟一个分支继续对MySQL进行维护,名为MariaDB,因此目前存在两个版本MariaDB和Oracle公司维护的MySQL;

历史版本

  • 4.0版本------支持InnoDB,事务;
  • 5.0版本------2003年;
  • 5.6版本------历史使用最多的版本;
  • 5.7版本------使用最多的版本;
  • 8.0版本------最新,功能最完善,改动最多,因此此版本没有被命名为5.8,而是直接命名为8.0版本;
5.6/5.7差异

5.7支持:

  • 多主
  • MGR高可用
  • 分区表
  • json
  • 性能
  • 修复XA等
5.7/8.0差异
  • 8.0支持:
  • 通用表达式
  • 窗口函数
  • 持久化函数
  • 自增列持久化
  • 默认编码utf8mb4
  • DDL原子性
  • JSON增强
  • 不在对group by进行隐藏排序
相关推荐
威哥爱编程几秒前
SQL Server 数据太多如何优化
数据库·sql·sqlserver
小华同学ai2 分钟前
AJ-Report:一款开源且非常强大的数据可视化大屏和报表工具
数据库·信息可视化·开源
Acrelhuang24 分钟前
安科瑞5G基站直流叠光监控系统-安科瑞黄安南
大数据·数据库·数据仓库·物联网
十叶知秋1 小时前
【jmeter】jmeter的线程组功能的详细介绍
数据库·jmeter·性能测试
瓜牛_gn3 小时前
mysql特性
数据库·mysql
奶糖趣多多4 小时前
Redis知识点
数据库·redis·缓存
CoderIsArt5 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧7 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Yaml48 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
Channing Lewis8 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce