mysql中采用uuid而不使用自增ID有什么优点
发布时间:2021-12-26 13:29:40 所属栏目:MySql教程 来源:互联网
导读:小编给大家分享一下mysql中采用uuid而不使用自增ID有什么优势,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 采用uuid而不使用自增ID的, 优势: 1、数据迁移时不会有主键冲
小编给大家分享一下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有什么优势”这篇文章的所有内容,感谢各位的阅读。 (编辑:好传媒网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |