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

小编给大家分享一下MySQL中采用uuid而不使用自增ID有什么优势,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

10年积累的网站建设、网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站制作后付款的网站建设流程,更有甘孜州免费网站建设让你可以放心的选择与我们合作。

采用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有什么优势”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!


本文名称:mysql中采用uuid而不使用自增ID有什么优势
文章转载:http://pwwzsj.com/article/pehgpo.html