数据库优化

数据库优化

数据类型的选择,重点在于“合适”二字,如何确定选择的数据类型是否合适了?
1、使用可以存下你的数据的最小的数据类型。(时间类型数据:可以使用varchar类型,可以使用int类型,也可以使用时间戳类型)
2、使用简单的数据类型,int要比varchar类型在mysql处理上简单。(int类型存储时间是最好的选择)
3、尽可能的使用not null定义字段。(innodb的特性所决定,非not null的值,需要额外的在字段存储,同时也会增加IO和存储的开销)
4、尽量少用text类型,非用不可时最好考虑分表。

数据库优化的方法

1.索引和SQL优化
2.数据库结构的优化
在这里插入图片描述

索引和SQL优化

由上图可知,在进行索引和SQL优化的过程中,通过分析慢日志或者SQL通过explain获取执行计划来分析出需要优化的数据。方法就是通过创建索引,或者优化SQL语句来对数据进行优化。

数据库结构的优化

数据类型的选择,重点在于“合适”二字,如何确定选择的数据类型是否合适了?

1、使用可以存下你的数据的最小的数据类型。(时间类型数据:可以使用varchar类型,可以使用int类型,也可以使用时间戳类型)
2、使用简单的数据类型,int要比varchar类型在mysql处理上简单。(int类型存储时间是最好的选择)
3、尽可能的使用not null定义字段。(innodb的特性所决定,非not null的值,需要额外的在字段存储,同时也会增加IO和存储的开销)
4、尽量少用text类型,非用不可时最好考虑分表。

范式化优化: 范式化是指数据库设计的规范,目前说道范式化一般是指第三设计范式。也就是要求数据表中不存在 非关键字段对任意候选关键字段的传递函数依赖则符合第三范式。

1.第一范式:目标是确保每列的原子性:如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)
	-- 每列都是不可再分的最小数据单元	
2.首先满足第一范式,并且表中非主键列不存在对主键的部分依赖。 第二范式要求每个表只描述一件事情。
3.满足第二范式,并且表中的列不存在对非主键列的传递依赖。

不符合第三范式要求的表存在以下问题:

1.数据冗余:(分类,分类描述)对于每一个商品都会进行记录。
2.数据的插入异常
3.数据的更新异常
4.数据的删除异常(删除所有数据,分类和分类描述都会删除,没有所有的记录)

反范式化:反范式是通过增加冗余数据或数据分组来提高数据库读性能的过程。在某些情况下, 反范式有助于掩盖关系型数据库软件的低效。关系型的范式数据库即使做过优化, 也常常会带来沉重的访问负载。

数据库表的拆分:通过某种特定的条件,将存放在同一个数据库中的数据分散存放到多个数据库上,实现分布存储,通过路由规则路由访问特定的数据库,这样一来每次访问面对的就不是单台服务器了,而是N台服务器,这样就可以降低单台机器的负载压力。
1.垂直(纵向)拆分:是指按功能模块拆分,比如分为订单库、商品库、用户库…这种方式多个数据库之间的表结构不同。
2.水平(横向)拆分:将同一个表的数据进行分块保存到不同的数据库中,这些数据库中的表结构完全相同。

垂直拆分能很好的起到分散数据库压力的作用。业务模块不明晰,耦合(表关联)度比较高的系统不适合使用这种拆分方式。
垂直拆分,拆分方式实现起来比较简单,根据表名访问不同的数据库就可以了。横向拆分的规则很多,这里总结前人的几点:

 (1)顺序拆分:
  优点:可部分迁移
  缺点:数据分布不均,
 (2)hash取模分: 
    优点:数据分布均匀
  缺点:数据迁移的时候麻烦;不能按照机器性能分摊数据 。
 (3)在认证库中保存数据库配置
 就是建立一个DB,这个DB单独保存user_id到DB的映射关系,每次访问数据库的时候都要先查询一次这个数据库,以得到具体的DB信息,然后才能进行我们需要的查询操作。
  优点:灵活性强,一对一关系
  缺点:每次查询之前都要多一次查询,会造成一定的性能损失。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值