• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

浅析MySQL 主键使用数字还是uuid查询快

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在实际开发中mysql的主键不能重复,可能会采用主键自增,为了防止主键重复也可能会采取雪花算法之类的算法保证,这两种主键保存的都是number类型 但是实际开发中可能会生成uuid作为主键那么疑问来了,到底哪种主键的效率高呢?

下面由测试来验证:

1.首先我们先创建一个表,用存储过程生成100w条数据然后分析:

创建表:

CREATE TABLE `my_tables` (
`id` VARCHAR(32) NOT NULL ,
`name` varchar(32) DEFAULT NULL,
`age` int(32) DEFAULT NULL,
`time` varchar(32) DEFAULT NULL,
`pwd` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

创建存储过程:

DROP PROCEDURE IF EXISTS my_insert;
CREATE PROCEDURE my_insert()
BEGIN
DECLARE n int DEFAULT 1;
loopname:LOOP
INSERT INTO `my_tables`(`name`,`age`,`time`,`pwd`) VALUES ('张三', 18, '0:0:0:0:0:0:0:1', '369');
SET n=n+1;
IF n=1000000 THEN
LEAVE loopname;
END IF;
END LOOP loopname;
END;

生成数据:

CALL my_insert();

第一种方式采用的主键是number类型的

下图是采用explain分析得出

2.接下来继续创建另一张表并生成数据

CREATE TABLE `my_tables2` (
`id` VARCHAR(32) NOT NULL ,
`name` varchar(32) DEFAULT NULL,
`age` int(32) DEFAULT NULL,
`time` varchar(32) DEFAULT NULL,
`pwd` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

注意:这张表的主键采用的是varchar类型的

创建存储过程并生成数据:

DROP PROCEDURE IF EXISTS proc_insert;
DELIMITER $
CREATE PROCEDURE pro_insert2()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i<=1000000 DO
INSERT INTO `my_tables2`(id,`name`,`age`,`time`,`pwd`) VALUES (i,'张三', 18, '0:0:0:0:0:0:0:1', '369');
SET i = i+1;
END WHILE;
END $;

CALL pro_insert2();

下图是第二种用主键查询的结果

如果有小伙伴对explain不太明白的可以去看看博客 https://blog.csdn.net/why15732625998/article/details/80388236

前后分析得出 使用uuid或者数字作为主键它的查询效率相差的并没有想象中的大,几乎可以忽略不记 只有key_len有些差别。

key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度,在不损失精确性的情况下,长度越短越好。key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。

到此这篇关于浅析MySQL 主键使用数字还是uuid查询快的文章就介绍到这了,更多相关mysql主键用数字还是uuid内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界!


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Spring boot+redis实现消息发布与订阅的代码发布时间:2022-02-10
下一篇:
通过redis的脚本lua如何实现抢红包功能发布时间:2022-02-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap