性能优化精髓

1、为什么要优化数据库
(1)因为系统的吞吐量瓶颈很大部分是数据库的访问速度
(2)在数据库中数据量越来越多的情况,会影响访问速度,必须优化来提升访问的速度
(3)数据库的数据是存储在磁盘上,访问速度远小于缓存。

2、如何优化
(1)设计数据库的时候,字段的设计,存储引擎的选择,
(2)可以对数据库进行分库分表,读写分离,还可以进行负债均衡
(3)还可以对SQL语句进行优化
(4)还可以利用好mysql的索引进行优化

3、字段的优化
(1)能使用定长的就使用定长的数据类型,因为非定长的数据类型会随着数据增大而增大,非定长的较大的数据会损失精度。
定长比如:char/double
非定长:varchar text decimal会用额外空间记录长度。

补充:char和varchar的区别
char是一种固定长度的数据类型,比如char(M),就是有固定的M长度,如果数据不够M的话,右边会有空格来补充到M,在varchar(M)类型的数据里,每个值只占用刚好够用的字节,然后加一位记录数据长度的字节,即总长度为(L+1)的字节。

对于char类型来说,最多只能存放的字符个数为255,和编码无关,任何编码最大容量都是255。
MySQL行默认最大65535字节,是所有列共享(相加)的,所以VARCHAR的最大值受此限制

(2)能使用not null 就不用使用null字段,因为非null字段的处理要比null字段的处理高效些,null在mysql中不好处理,并且要额外的空间。

4、表的设计
外键foreign key只能实现一对一或者一对多的映射,如果是多对多的情况下,可以新建一张表,设计两个一对多的表和一个关系表。
例如 老师表 和 学生表
套路一样 先站在老师表 在站在学生表
老师表角度: 一个老师可以对应多个学生 一对多
学生表角度: 一个学生可以对应多个老师 一对多
如果双方都是一对多的关系 那么 两者是多对多关系。

三大范式
(1)第一范式:数据库中每一个列都不允许被拆分,例如一个列中不能有逗号把它们拆分成两段
(2)第二范式:在第一范式的基础上,非主键列必须完全依赖于主键,而不能只依赖于主键的一部分。(即主键有两个字段,而非主键只依赖主键中的一个字段,有ID和课名两个主键,而姓名通过ID就可以确定,不需要课名)
解决方案:把这个表拆分成两个表。
(3)第三范式:在第二范式的基础上,非主键只能依赖于主键,不能依赖于其他非主键。
比如一个学生表有学号,学号对应的学院名称,学院表对应的学院主任,而只有学号是主键,但是学院主任还依赖非主键学院名称,所以就拆分成两个表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值