温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

mysql中采用uuid而不使用自增ID有什么优势

发布时间:2021-11-03 09:53:13 来源:亿速云 阅读:372 作者:小新 栏目:MySQL数据库

小编给大家分享一下mysql中采用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> 

以上是“mysql中采用uuid而不使用自增ID有什么优势”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI