MySQL时间字段究竟使用INT還湜DateTime的说明
`senddata`int(I.0)unsignedNOTNULLDEFAULT0;
随后又在网上找到这篇文章,看来如果时间字段有参与运算,用int更好,I.来检索时不用在字段上转换运算,直接用于时间比较!II来如下
更多精彩就在: 51免费论文网|www.jxszl.com
所述效率也更高.
归根结底:用int来代替data类型,更高效.
环境:
WindowsXP
PHPVersionV.II.IX
MySQLServerV.I.
第I.步.创建I.个表date_test(非定长.int时间)
CREATETABLE`test`.`date_test`(
`id`INTNOTNULLAUTO_INCREMENT,
`start_time`INTNOTNULL,
`some_content`VARCHAR(IIVV)NOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDB;
第II步.创建第II个表date_testII(定长.int时间)
CREATETABLE`test`.`date_testII`(
`id`INTNOTNULLAUTO_INCREMENT,
`start_time`INTNOTNULL,
`some_content`CHAR(IIVV)NOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDB;
第III步.创建第III个表date_testIII(varchar.datetime时间)
CREATETABLE`test`.`date_testIII`(
`id`INTNOTNULLAUTO_INCREMENT,
`start_time`DATETIMENOTNULL,
`some_content`VARCHAR(IIVV)NOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDB;
第IV步.创建第IV个表date_testIII(char.datetime时间)
CREATETABLE`test`.`date_testIV`(
`id`INTNOTNULLAUTO_INCREMENT,
`start_time`DATETIMENOTNULL,
`some_content`CHAR(IIVV)NOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDB;
ok,现在我们开始做测试,环境是php,先向各个表插入I.百万条数据.插入的时候分II00次,每次进库V000条.
表I.执行记录:页面运行时间:IIVI.VIXIXVIIVIIIVIIIIX0IVII秒,插入的时候发现I.个有趣的现象:SELECTcount(id)FROM`date_test`WHEREI.的结果是I.00w,而直接select*from`date_test`却是I.,000,IIIVIIIV条结果.(后来看到这是I.个可能接近的值,请参看MySQLFAQIII.I.I.).
表II执行记录:页面运行时间:VIII.IIIIX0VIIIIIVIIVIIIIXIVII秒,这次记录是I.,000,0VIVI条.
表III执行记录:页面运行时间:III0.IIVVIIVIVVI0IXVIIIV秒,这次的是I.,000,IIIIIV条.
表IV执行记录:页面运行时间:VIVII.VIIIIXIIIIX00VIIIVIII.秒,这次的是:I.,000,0VIIIII条.
现在把IV个表的start_time字段I.I.加上索引.
测试IV个表的更新,分别updateI.00条记录,并记录时间:
表I.:页面运行时间:II.VIIII.VIII00VIIIIXIXVI.秒(非定长,int时间)
表II:页面运行时间:II.VIVVIIVIIIVVIIIIXVIIII秒(定长,int时间)
表III:页面运行时间:II.IVV0VIIVIIIII000VIIII秒(varchar,datetime时间)
表IV:页面运行时间:II.VIIIIIVIIIXVIIIIV0IXIVVIII秒(char,datetime时间)
测试IV个表的读取,分别selectI.00条随机记录,以主键id为条件查询,并记录时间:
表I.:页面运行时间:0.IIIVIIIIIVIVI.0IX0VIIIII秒(非定长,int时间)
表II:页面运行时间:0.VIVIII.VIIII.0I.V0I.V秒(定长,int时间)
表III:页面运行时间:0.IIIIIIIV0IVVIII0IIIIIVIIVII.秒(varchar,datetime时间)
表IV:页面运行时间:0.V0VIII0VIIXVIIIIXIIVIIIVIII秒(char,datetime时间)
测试IV个表的读取,分别selectI.0条随机记录,以star_time为条件查询,并记录时间:
表I.:页面运行时间:III0.I.IXVIIIIVIIIVIII0IIIVIIII秒(非定长,int时间)
表II:页面运行时间:VIV.I.IXIIVIIXI.0VIIIVIIVII秒(定长,int时间)
表III:页面运行时间:IIIIX.VIIIII.0VIIIVIIXVIIVIIIIX秒(varchar,datetime时间)
表IV:页面运行时间:VII0.IVVIIIIIIVIIIV00III.秒(char,datetime时间)
因为量比较小,所以我们默认即使是微小的变化,也是有意义的.
结论:
大数据量下,如果存在大量的select*fromtablewhere时间>XX这样的查询,在MySQLV.I.时使用int换datetime是有意义的.
原文链接:http://www.jxszl.com/biancheng/dedecms/72685.html