数据库结构优化

来源:互联网 发布:2016校园暴力事件数据 编辑:程序博客网 时间:2024/06/04 19:17

 选择合适的数据类型:

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

1:使用可以存下你爹数据的最小数据类型。

2:使用简单的数据类型,Int要比型varchar类型在mysql处理上简单。

3:尽可能的 使用not null定义字段。

4:尽量少用text类型,非用不可时最好考虑分表

使用int来存储日期时间,利用UNIX_TIMESTAMP(),FROM_UNIXTIME()连个函数来进行转换。(前边为插入数据库使用后边为搜索数据库下同)

使用bigint来存储IP地址,利用INET_ATON(),INET_NTOA()两个函数来进行转换。

5:表的范式化和反范式化

反范式化是指 为了查询效率的考虑把原来符合第三范式的表适当的增加冗余,已达到优化查询效率的目的,反范式化是一种以空间来换取时间的操作。

原表结构及查询数据sql语句写法:

增加冗余以后表结构和查询sql语句写法:



6:表的垂直拆分:

    所谓垂直拆分就是把原来一个有很多列的表拆分成多个表,这解决了表的宽度问题,通常垂直拆分可以按以下原则进行

1.把不常用的字段单独存放在一个表中。

2.把大字段独立存放到一个表中。

3.把经常在一起的字段放到一起。

拆分前:

拆分后:



7:表的水平拆分:

表的水平拆分要是为了解决单表的数据量过大的问题,水平拆分的表每个表的结构都是完整一致的。以下面的payment表为例

  1.对customer_id进行hash运算,如果要拆分成5个表则使用mod(customer_id,5)取出0-4个值。

  2.针对不同的hashID把数据存到不同的表中。

 不足:

  1:跨分区表进行数据查询。

  2:统计及后台报表操作。