分享更有价值
被信任是一种快乐

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

文章页正文上

小编给大家分享一下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 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)

my免费主机域名sql> 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数据库连接过多出现错误怎么解决

这篇文章主要介绍免费主机域名“mysql数据库连接过多出现错误怎么解决”,在日常操作中,相信很多人在mysql数据库连接过多出现错误怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql数据库连接过多出现错误怎么解决”…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册