mysql 存储日期时间datetime类型和int(10)类型哪个效率更高?
微wx笑 2023-05-29【数据库】 2 0关键字: mysql 优化技巧
虽然mysql 有存储日期时间的datetime类型,但是我们会看到一些系统设计时都采用 int(10) 类型,那么到底是哪个效率更高呢?
虽然mysql 有存储日期时间的datetime类型,但是我们会看到一些系统设计时都采用 int(10) 类型,那么到底是哪个效率更高呢?
在MySQL中,datetime类型和int(10)类型在效率上有所差异:1. 存储空间:- datetime类型存储时间值,需要8字节存储空间,范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。
- int(10)类型存储整数,需要4字节存储空间,范围是-2147483648到2147483647。所以从存储空间角度来说,int(10)类型更高效。2. 查询效率:- 对datetime类型列的查询,MySQL会先转换为时间戳(timestamp)进行查询,所以查询效率会略低。
- 对int(10)类型的查询,MySQL可以直接比较整数值,所以查询效率较高。所以从查询效率角度来说,int(10)类型也更高效。3. 索引:- datetime类型列上建立的索引,其索引值是8字节的二进制编码,所以索引文件较大,查询索引也需要更长时间。
- int(10)类型列上建立的索引,其索引值是4字节的整数,所以索引文件较小,查询索引速度也更快。所以同样从索引方面考虑,int(10)类型的列上创建的索引,其效率也更高。综上,从存储空间、查询效率以及索引三个方面来比较,int(10)类型的效率明显高于datetime类型。所以,如果您的需求是存储时间值,同时也要考虑效率,建议:1. 使用int(10)类型来存储时间戳(timestamp)2. 并在插入数据时,使用FROM_UNIXTIME()函数将时间转换为时间戳存入3. 在查询时,使用UNIX_TIMESTAMP()函数将int(10)类型的时间戳转换回datetime这样可以在一定程度上达到既存储时间值,又不损失太多效率的目的。
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/database/2023-05-29/1898.html