java程序员进阶:618大战前夕,一条SQL引发的深思—MySQL优化

377 阅读2分钟

优化概述

  • 采取一定措施使变得优异。
  • 为了更加优秀而“去其糟粕,取其精华”;
  • 为了在某一方面更加出色而去其糟粕;
  • 为了在某方面更优秀而放弃其他不太重要的方面;
  • 使某人/某物变得更优秀的方法/技术等;
  • 在计算机算法领域,优化往往是指通过算法得到要求问题的更优解

一个Sql引发的思考

image

这是个报表查询的SQL,发现下载excel报表的时候特别慢,请你优化它

常用的优化方式

  1. 服务器硬件
  2. MySql服务器优化
  3. SQL本身优化
  4. 反范式设计优化
  5. 物理设计优化(字段类型、长度设计,存储引擎选择)
  6. 索引优化

反范式化设计

  1. 反范式化是针对范式化而言的
  2. 所谓得反范式化就是为了性能和读取效率得考虑而适当得对数据库设计范式得要求进行违反
  3. 允许存在少量得冗余,换句话来说反范式化就是使用空间来换取时间

三大范式

数据库设计的第一大范式

  1. 数据库表中的所有字段都只具有单一属性
  2. 单一属性的列是由基本数据类型所构成的
  3. 设计出来的表都是简单的二维表

数据库设计的第二大范式

要求表中只具有一个业务主键,也就是说符合第二范式的表不能存在非主键列只对部分主键的依赖关系

数据库设计的第三大范式

指每一个非非主属性既不部分依赖于也不传递依赖于业务主键,也就是在第二范式的基础上相处了非主键对主键的传递依赖

物理设计

为表中的字段选择合适的数据类型

当一个列可以选择多种数据类型时

  1. 优先考虑数字类型
  2. 其次是日期、时间类型
  3. 最后是字符类型
  4. 对于相同级别的数据类型,应该优先选择占用空间小的数据类型

索引是什么?

MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。可以得到索引的本质:索引是数据结构。

最简单的索引

image

稍微复杂点的索引

image

MySql中的索引

image

上面是数据表,一共有两列七条记录,最左边的是数据记录的物理地址

索引分类

image

基础语法

image

本文到此结束!喜欢本文的朋友帮忙转发和关注一下,感谢!

PS:本文完整视频获取地址:Java学习、面试;文档、视频资源免费获取