选择合适的数据类型:
数据类型的选择,重点在于合适二字,如何确定选择的数据是否合适?
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:统计及后台报表操作。