63. mysql==>schema与数据类型优化

 

本章主要介绍:数据类型对性能的影响html

1.选择优化的数据类型

mysql支持不少中数据类型,因此准时下面几个原则有利于作出更好的选择mysql

(1) 更好的一般更好,好比:一个字段(varchar)若是数据最长是10位,设计为varchar(100) 就对性能很影响spring

   

 

(2) 简单就好:好比整数比字节操做代价更低sql

    字符集和校对规则是的字符比整数更复杂缓存

(3)尽可能避免null性能

  若是查询在包含可为null的列,对mysql来讲更加难优化优化

 

1.1 数字类型

整数分类:加密

              (1)整数:不带小数点的数字spa

              (2)实数  带小数点部分的数字.net

 

1.1.1 整数

    

1.1.2 小数

     mysql存储数字类型的小数有三种方式:

                              float: 占用4 个字节 

                           double:占用8 个字节 

                          decimal:    DECIMAL(M,D)           M字节(D+2 , 若是M < D) 

decimal用于精确度要求高的数据,它比浮点型(float、double消耗更多的空间

DECIMAL(M,D) :  M:总的位数   D:小数点位数      如 Decimal(5,2) :数据总长为5,小数点后面保留2位 前面保留3位   

浮点型与decemal比较:

                                优势:精确度高

                                缺点:消耗资源多

1.2 字符串类型

经常使用字符串类型: varchar 、char

(1)varchar 保存的确定是存储数据大小,char才是设定长度的,

(2) varchar(255) 占用实际存储数据+1个字节  varchr(256) 占用实际数据长度+2

           varchar(n):无论是否用了n个空间 都会消耗n个字节

(3) 效率上vachar 是固定长度 效率更高

1.2.1 varchar

  (1) 定义: varchar用于存储可变字符串

  (2)varchar(N):表示最多存储N个字符,实际应用中占用存储是根据实际存储的数据决定(如:varchar(5) 最多存放5个字符,可是我存放了2个,占用空房=2+1=3个字符,这里的2是数据字符,1是记录字符串长度)

(3) varchar(5) 与varchar(255) 均可以存储  hello  并且空间开销都同样是5+1字节

         可是在mysql在利用内存块来保存内存值的时候,尤为是对数据进行排序的时候会按照表设计的大小占用空间,若是过大就很糟糕了

转:https://blog.csdn.net/xie_cinnamon/article/details/98314346

(4)varchar 在保存数据的时候  不会截掉最后的空格,因此在代码开发中记得使用trim()去掉先后空格

(5) UTF-8 状态下,单个 varchar 长度不能超过 (65535 - 2) / 3 = 21844

1.2.2  char

     (1)  类型是定长的

   (2) 适合存储很短的字符串 或者  存储全部值都接近的长度, 如加密后的MD5

   (3) char比varchar在存储空间上更有效率,如:varchar(1) 占用2个字节,另外一个记录长度,char(1)只须要1个字节,并且char查询速度也更高

 

1.3 日期和时间类型

(1)timestamp 时间范围小,datetime时间范围大  可是精确度都是   yyyy-MM-dd HH:mm:ss,通常状况timesatamp够用

(2)timestamp占用4个字节  datetime占用8个字节  

总结:平时开发用timestamp

 使用:

          

  2.mysql schema设计

2.1 mysql范式与反范式

2.1.1 mysql范式

https://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html

 

(1) 第一范式(确保每列保持原子性)

(2)   第二范式(确保表中的每列都和主键相关)

(3) 第三范式(确保每列都和主键列直接相关,而不是间接相关)

 

2.1.2 mysql 反范式

 主要针对 第三范式:确保每列都和主键列直接相关,而不是间接相关

    遵照第三范式:

                

 

反范式:

          将用户数据 冗余到订单信息表中,这样不需再关联表 查询效率提升,缺点:数据被冗余了

2.2  mysql 缓存表

    定义:就是优先处理完成的数据结果表

(1) 用途1:对于数据交易十分频繁的系统咱们要统计 用户实时登陆状况很难,就可使用定时任务汇总数据到一张表中

(2) 用途2:对于政府那种须要统计不少数据 求出须要数据的(很占用内存),能够在晚上使用定时任务跑出上一天的数据

实现方式:

      (1) mysql 定时执行任务  https://my.oschina.net/springMVCAndspring/blog/1820684

     (2)   spring定时任务:   http://cron.qqe2.com/

相关文章
相关标签/搜索