我的时间字段变迁(可能会引起某些人的不满)
时间:2009-12-30
来源:互联网
【早期】
99年用mysql的时候主要使用int型,string型用得少主要是为兼容其他数据库。
时间戳用int型真是不错,date('Y-m-d',$time)可以很随意的输出各种格式的数据,输入也不错php的time(),mysql的now()即可。
【过渡期】
为了能让数据库自动更新时间,也用过timestamp型,但发现用两个以上的时间字段只自动更新一个似乎有问题,很短暂。
【中期】
几年时间过去了,int型用php处理确实不错,但问题来了:
1. 调试:插入/修改时间后检查对不对,只能使用from_unixtime转了以后和当前时间比较。
2. 维护:某大大要查某个人的操作记录,需要知道时间。好,登录数据,select * from tbl不行,select *,from_unixtime(time) from tbl不行,好吧,只能老老实实写全字段。
3. 查询:在表单上用户选择时间,查询start_date到end_date之间的数据,只能转换。具体函数忘了,每次用每次现查。
4. 统计:统计某个时间段的PV/UV等。好吧,还是转换,可数据量大的时候,还要等。那我建索引?在时间字段上用函数,没戏!
5. 输出:这点原先以为用date()很简单,可有些表想偷懒,反正内部使用就直接select * from tbl出来显示吧,时间字段还得处理。
6. 好处:记住了两个mysql函数,unix_timestamp和from_unixtime。还有就是大家都用int型。
不是很痛苦,但总觉得有点不顺,那就改改吧。从此开始用datetime类型。
1. 调试维护简单了
2. 查询简单了些log_date between '$start_date 00:00:00' and '$end_date 23:59:59'
3. 统计还得用函数,不过可以把datetime型当成字符串处理。
4. 输入简单了些。
5. datetime可以建索引,相当于两个int型。
对于只记录日期的也用date型。
【晚期】
晚期就是指现在,彻底统一了,不仅是log表
log_date date型 NULL
log_time time型 NULL
所有带日期时间的表都用
create_date date型 NULL
create_time time型 NULL
modify_date date型 NULL
modify_time time型 NULL
好处
1. 调试方便,直观
2. 维护方便,直观
3. 查询方便,log_date between ? and ?,或者log_date >= ?,或者 log_date like '2009-12-%'
4. 输出方便,日期直接输入log_date
5. 效率最高,所建的索引效率最高
6. 统计方便,select log_date,count(*),count(distinct mobile) from tbl group by log_date
7. 其他好处:丰富的mysql时间处理函数;可做时段统计;虽然开发时可能不要求统计功能,但能随时应付突然其来的统计需求。
不好的地方就是,当接手别人的数据库,看见int时间戳,只能皱皱眉头多花点时间处理。
好吧,我只能说我被date/time类型征服了。
作者: 602000 发布时间: 2009-12-30
作者: evilhandsome 发布时间: 2009-12-30
作者: 林轻灵 发布时间: 2009-12-30
作者: mwb525 发布时间: 2009-12-30
使用int 做时间时段,我觉得主要是为了效率。相对 date或datetime等,int在条件索引上是比 date等快的。毕竟是整型数据,底层排序也快!对此,大家可以做一个测试。使用int和date做where条件。
这里引用别人做的一个测试:
http://www.54chen.com/_linux_/%E5%8E%9F%E5%88%9B%E5%AE%9E%E6%B5%8Bmysql%E6%97%B6%E9%97%B4%E5%AD%97%E6%AE%B5%E7%A9%B6%E7%AB%9F%E4%BD%BF%E7%94%A8int%E8%BF%98%E6%98%AFdatetime%EF%BC%9F.html
作者: blvming 发布时间: 2009-12-31
datetime 索引占2个整型
date 索引占1个整型
time 索引占1个整型
拿int型和datetime去比较没有意义。而且我已经放弃datetime,用双字段date+time去存储时间
对于查询某个日期的sql语句来说
int 索引使用range
date索引可使用const
explain可以看到,你说哪个快呢?
当然对于查询精确到某天某时,那肯定还是int快。
作者: 602000 发布时间: 2009-12-31
一直在用INT型
作者: adbbaby 发布时间: 2009-12-31
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28