测试缘由
一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿实际的案例来说服他,所以准备做一个详细的测试。
作为互联网公司,一定有用户表,而且用户表UC_USER基本会有百万记录,所以在这个表基础上准测试数据来进行测试。
测试过程是目前我想到的多方位的常用的几种类型的sql进行测试,当然可能不太完善,欢迎大家留言提出更加完善的测试方案或者测试sql语句。
1、准备表以及数据
UC_USER,自增ID为主键,表结构类似如下:
CREATE TABLE `UC_USER` ( |
UC_USER_PK_VARCHAR表,字符串ID为主键,采用uuid
CREATE TABLE `UC_USER_PK_VARCHAR_1` ( |
2、500W数据测试
2.1 录入500W数据,自增ID节省一半磁盘空间
确定两个表数据量
# 自增id为主键的表 mysql> select count(1) from UC_USER; +----------+ | count(1) | +----------+ | 5720112 | +----------+ 1 row in set (0.00 sec)
mysql>
# uuid为主键的表 mysql> select count(1) from UC_USER_PK_VARCHAR_1; +----------+ | count(1) | +----------+ | 5720112 | +----------+ 1 row in set (1.91 sec) |
占据的空间容量来看,自增ID比UUID小一半左右。
主键类型 |
数据文件大小 |
占据容量 |
自增ID |
-rw-rw---- 1 mysql mysql 2.5G Aug 11 18:29 UC_USER.ibd |
2.5 G |
UUID |
-rw-rw---- 1 mysql mysql 5.4G Aug 15 15:11 |