
设计指导思想和注意事项都梳理了一下,那来个小练习把
我们使用 MySQL 内置的函数(FROM_UNIXTIME(),UNIX_TIMESTAMP()),可以将日期转化为数字,用 INT UNSIGNED 存储日期和时间
示例
时间 2020-08-17 22:22:22 与整数之间的转换,转化后数字是连续的,占用空间更小,并且可以使用索引提升查询性能。
mysql> select UNIX_TIMESTAMP('2020-08-17 22:22:22');
+---------------------------------------+
| UNIX_TIMESTAMP('2020-08-17 22:22:22') |
+---------------------------------------+
| 1597674142 |
+---------------------------------------+
1 row in set
mysql> select FROM_UNIXTIME(1597674142);
+---------------------------+
| FROM_UNIXTIME(1597674142) |
+---------------------------+
| 2020-08-17 22:22:22 |
+---------------------------+
1 row in set
mysql> mysql> select UNIX_TIMESTAMP(now());
+-----------------------+
| UNIX_TIMESTAMP(now()) |
+-----------------------+
| 1597674191 |
+-----------------------+
1 row in set
mysql> select FROM_UNIXTIME(1597674191);
+---------------------------+
| FROM_UNIXTIME(1597674191) |
+---------------------------+
| 2020-08-17 22:23:11 |
+---------------------------+
1 row in set
mysql> 
因此,我们使用 INT UNSIGNED(占用 4 个字节)存储 IP,非 Char(15)。占 15 个字节。
mysql> select INET_ATON('127.0.0.1');
+------------------------+
| INET_ATON('127.0.0.1') |
+------------------------+
| 2130706433 |
+------------------------+
1 row in set
mysql> select INET_NTOA(2130706433);
+-----------------------+
| INET_NTOA(2130706433) |
+-----------------------+
| 127.0.0.1 |
+-----------------------+
1 row in set
mysql> 将 IP 的存储从字符型转换成整形,转化后数字是连续的,提高了查询性能,使查询更快,占用空间更小。
