mysql表的设计

关于mysql表的设计,咱也不是开发,粗谈下自己总结的经验。

1,字段的合理设置。
    在设置表的时候,要合理的选择正确的字段类型,根据需要而定,不能过度滥用。有个原则是:尽可能使用最小的数据类型,最小的页是最有效的。例如,所有的数字都用bigint,所有的字符窜都用varchar(1024)或直接用text等,这都是不对的,仅仅是数字类型,mediumint就比int节省四分之一的空间,有个著名的特例,就是IP类型的存储,惯例上会用字符窜存储点分十进制数据,而IP本质上确是一个无符号的整形数字,这就会用到原来需要空间的四分之一了。
    
    还有需要注意的是NULL默认值,有个规则是,在设计表的时候,尽可能地设置字段为NOT NULL,这样在检索数据的时候,不需要再额外逐个去判断是否为NULL,从而会更好的利用索引,加速SQL的执行速度。同时,每个字段会节省1bit空间。
    
2,存储格式
   在5.7.9之后,innodb表默认的行格式由之前的默认的compact变成了DYNAMIC,关于此二者及其他格式的区别,这里不做陈述。总体上COMPACT格式会节约20%的空间,同时,在存储UTF8或UTF8MB4数据的时候,COMPACT格式在存储时会精良地节约空间,不对其中的空格进行存储。这与其他存储固定长度数据的类型相比,也会介于不少空间,所以在一些关键字段的格式选择上,如果有空间问题,可以特殊对待,而不是一味的使用默认值。当然,innodb还有一种存储格式为COMPRESSED,相比myisam,innodb的压缩格式可以同时支持读和写,使用上方便一些。
  
3,索引问题
   添加索引的时候一定要注意它带来的副作用,索引虽然能提升查询的性能,但需要额外写索引文件,它会降低mysql写数据的速度,同时,也会增加数据文件的大小,加的索引越多写入数据越慢,数据文件越大,所以在设计索引的时候,会要求主键的字段类型一定要用数字类型,并且尽可能的小,能用INT的,绝对怒要用BIGINT,在设计二级索引的时候,只添加最需要的索引,避免添加重复索引,针对长字符窜字段,尽量添加前缀索引。
   
   
   合理设计表结构,
   在设计关系型数据库表结构的时候,有三示范的说话,简而言之,第一范式要求表不能有重复的列;第二范式,要求表有主键,所有非主键字段都要依赖主键,;第三范式要求表中的字段不能依赖于同一表中的其他非主键字段。
   
   在实际生产中,使用使用数据库的目睹是最大程度地适应业务的需求和发展,有时候,需要根据实际情况合理设计表结构,就不能严格按照范式来设计,就会出现一些反范式的情形。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值