æ°æ®åºä¸å¯ä»¥ç¨datetimeãbigintãtimestampæ¥è¡¨ç¤ºæ¶é´ï¼é£ä¹éæ©ä»ä¹ç±»åæ¥å卿¶é´æ¯è¾åéå¢ï¼
åææ°æ®åå¤
éè¿ç¨åºå¾æ°æ®åºæå ¥50wæ°æ®
æ°æ®è¡¨ï¼
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`time_date` datetime NOT NULL,
`time_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`time_long` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `time_long` (`time_long`),
KEY `time_timestamp` (`time_timestamp`),
KEY `time_date` (`time_date`)
) ENGINE=InnoDB AUTO_INCREMENT=500003 DEFAULT CHARSET=latin1
å¤å¶ä»£ç
å ¶ä¸time_longãtime_timestampãtime_date为å䏿¶é´çä¸åå卿 ¼å¼
å®ä½ç±»users
@Builder
@Data
public class Users {
private Long id;
private Date timeDate;
private Timestamp timeTimestamp;
private long timeLong;
}
å¤å¶ä»£ç dao屿¥å£
@Mapper
public interface UsersMapper {
@Insert("insert into users(time_date, time_timestamp, time_long) value(#{timeDate}, #{timeTimestamp}, #{timeLong})")
@Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")
int saveUsers(Users users);
}
å¤å¶ä»£ç æµè¯ç±»å¾æ°æ®åºæå ¥æ°æ®
public class UsersMapperTest extends BaseTest {
@Resource
private UsersMapper usersMapper;
@Test
public void test() {
for (int i = 0; i < 500000; i++) {
long time = System.currentTimeMillis();
usersMapper.saveUsers(Users.builder().timeDate(new Date(time)).timeLong(time).timeTimestamp(new Timestamp(time)).build());
}
}
}
å¤å¶ä»£ç
çææ°æ®ä»£ç æ¹è³githubï¼github.com/TiantianUpuâ¦
妿䏿³ç¨ä»£ç çæï¼èæ¯æ³éè¿sqlæä»¶åå ¥æ°æ®ï¼ésqlæä»¶ç½çå°åï¼pan.baidu.com/s/1Qp9x6z8Câ¦
sqlæ¥è¯¢éçæµè¯
éè¿datetimeç±»åæ¥è¯¢ï¼
select count(*) from users where time_date >="2018-10-21 23:32:44" and time_date <="2018-10-21 23:41:22"
å¤å¶ä»£ç
èæ¶ï¼0.171
éè¿timestampç±»åæ¥è¯¢
select count(*) from users where time_timestamp >= "2018-10-21 23:32:44" and time_timestamp <="2018-10-21 23:41:22"
å¤å¶ä»£ç
èæ¶ï¼0.351
éè¿bigintç±»åæ¥è¯¢
select count(*) from users where time_long >=1540135964091 and time_long <=1540136482372
å¤å¶ä»£ç
èæ¶ï¼0.130s
ç»è®º
å¨InnoDBåå¨å¼æä¸ï¼éè¿æ¶é´èå´æ¥æ¾ï¼æ§è½bigint > datetime > timestamp
sqlåç»éçæµè¯
使ç¨bigint è¿è¡åç»ä¼æ¯æ¡æ°æ®è¿è¡ä¸ä¸ªåç»ï¼å¦æå°bigintåä¸ä¸ªè½¬åå¨å»åç»å°±æ²¡ææ¯è¾çæä¹äºï¼è½¬å乿¯éè¦æ¶é´ç
éè¿datetimeç±»ååç»ï¼
select time_date, count(*) from users group by time_date
å¤å¶ä»£ç
èæ¶ï¼0.176s
éè¿timestampç±»ååç»ï¼
select time_timestamp, count(*) from users group by time_timestamp
å¤å¶ä»£ç
èæ¶ï¼0.173s
ç»è®º
å¨InnoDBåå¨å¼æä¸ï¼éè¿æ¶é´åç»ï¼æ§è½timestamp > datetimeï¼ä½æ¯ç¸å·®ä¸å¤§
sqlæåºéçæµè¯
éè¿datetimeç±»åæåºï¼
select * from users order by time_date
å¤å¶ä»£ç
èæ¶ï¼1.038s
éè¿timestampç±»åæåº
select * from users order by time_timestamp
å¤å¶ä»£ç
èæ¶ï¼0.933s
éè¿bigintç±»åæåº
select * from users order by time_long
å¤å¶ä»£ç
èæ¶ï¼0.775s
ç»è®º
å¨InnoDBåå¨å¼æä¸ï¼éè¿æ¶é´æåºï¼æ§è½bigint > timestamp > datetime
å°ç»
妿éè¦å¯¹æ¶é´å段è¿è¡æä½(å¦éè¿æ¶é´èå´æ¥æ¾æè æåºç)ï¼æ¨è使ç¨bigintï¼å¦ææ¶é´å段ä¸éè¦è¿è¡ä»»ä½æä½ï¼æ¨è使ç¨timestampï¼ä½¿ç¨4个åèä¿åæ¯è¾èç空é´ï¼ä½æ¯åªè½è®°å½å°2038å¹´è®°å½çæ¶é´æé