性能测试------采用uuid而不使用自增ID

采用uuid而不使用自增ID的,
优势:
1、数据迁移时不会有主键冲突。
2、在使用分布式架构的主主同步时,也无需配置auto_increment_offset/auto_increment_increment,保证搭建比较简单。
劣势:
1、uuid比bigint占用存储空间大。
2、数据量达到500w以上性能明显没有bigint快。
(性能从哪些方面去比较呢?)
单条查询,
范围查询,
范围统计,
插入,
更新,
备份恢复。
#######################################################
#这里我们只做了一个单条查询的效率比较
#######################################################
环境:单个台式机
ubuntu 14.04 64位,
cpu cores=2  
mem=7935M
测试步骤:
1、分别创建以id,uuid为主键的表。
2、分别插入100w条记录(编写存储过程生成测试数据,收获:需要关闭自动提交,效率大大的提升)。
3、分别以id ,uuid执行单条查询。
4、比较查询时间
最后结果都是在0秒以内完成。
脚本见附件。


#################################
DELIMITER $$


USE `test`$$


DROP PROCEDURE IF EXISTS `p_product_uuid`$$


CREATE DEFINER=`root`@`%` PROCEDURE `p_product_uuid`(IN n BIGINT)
BEGIN
  DECLARE i INT DEFAULT 1 ;
  SET autocommit = 0;
  
  WHILE
    (i <= n) DO 
    INSERT INTO tmp_id_uuid (id, UUID) 
    VALUES
      (i, UUID()) ;
    
    SET i = i + 1 ;
    
  END WHILE ;
  COMMIT;
SET autocommit = 1;
  
END$$


DELIMITER ;
#####################################
ps:在调试过程中,遇到sql一直在执行,需要停止掉,处理方式如下:
show processlist;
找出你要停止的语句
然后找出你要终止的语句的id
在系统下mysqladmin -uroot -ppassword kill 要杀的ID
#####################################


mysql> truncate table tmp_id_uuid;
Query OK, 0 rows affected (0.14 sec)


mysql> select count(*) from tmp_id_uuid;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)


mysql> call p_product_uuid(100000);
Query OK, 0 rows affected (5.16 sec)


mysql> select count(*) from tmp_id_uuid;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set (0.04 sec)


mysql> truncate table tmp_id_uuid;
Query OK, 0 rows affected (0.15 sec)


mysql> call p_product_uuid(1000000);
Query OK, 0 rows affected (43.03 sec)


mysql> create table tmp2_id_uuid as select * from tmp_id_uuid;
Query OK, 1000000 rows affected (18.07 sec)
Records: 1000000  Duplicates: 0  Warnings: 0


mysql> select count(*) from tmp2_id_uuid;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (0.31 sec)


mysql> alter table tmp_id_uuid add primary key (id);
Query OK, 0 rows affected (24.14 sec)
Records: 0  Duplicates: 0  Warnings: 0


mysql> alter table tmp2_id_uuid add primary key (uuid);
Query OK, 0 rows affected (25.94 sec)
Records: 0  Duplicates: 0  Warnings: 0


mysql> 
mysql> 
mysql> flush tables;
Query OK, 0 rows affected (0.00 sec)


mysql> select * from tmp_id_uuid where id=500000;
+--------+--------------------------------------+
| id     | uuid                                 |
+--------+--------------------------------------+
| 500000 | e3332083-c743-11e6-bc1e-00e066731e45 |
+--------+--------------------------------------+
1 row in set (0.00 sec)


mysql> flush tables;
Query OK, 0 rows affected (0.00 sec)


mysql> select * from tmp2_id_uuid where uuid='e3332083-c743-11e6-bc1e-00e066731e45';
+--------+--------------------------------------+
| id     | uuid                                 |
+--------+--------------------------------------+
| 500000 | e3332083-c743-11e6-bc1e-00e066731e45 |
+--------+--------------------------------------+
1 row in set (0.00 sec)


mysql>
mysql> 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24349972/viewspace-2131134/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24349972/viewspace-2131134/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值