定义合适的数据类型对Mysql性能提升非常重要
- IPV4地址的存储:IPV4地址,例如:127.0.0.1 = 10000000 00000000 00000000 00000001,实际上是一个32位的无符号整数,用小数点分隔开方便阅读,并不是字符串,所以存储时,应该使用unsigned int来存储。显示的时候用INET_ATON来转换成ip格式,更新或插入时使用INET_NTOA转换成整数插入。
- 时间的存储:很多人喜欢用INT来存储时间,实际上,这并不能带来任何性能上的提交;使用内置的DATETIME和TIMESTAMP更方便,因为Mysql内置的很多时间函数可以对时间进行处理。一般情况下,我们都尽量使用TIMESTAMP来存储时间,因为它只占用4个字节,而DATETIME占用8个字节,TIMESTAMP时间到2038年,足够用了。关于时间的比较应该使用整数的比较方式,例如下面两个SQL的执行效率,对于千万行的数据处理差距是巨大的。
-- 取前一天的数据 -- 高效的执行 SELECT * FROM room_match.view_shouji where writetime between now() - INTERVAL 1 day and now(); -- 低效的比较 SELECT * FROM room_match.view_shouji where date(writetime) = "2013-12-15"
- 对确定类型的列使用ENUM,ENUM是表面显示为字符串,实际存储为整数的类型,使用 enum列名+0可以查看存储的整数值。使用性别,国家等固定的值可以使用。