服务器之家

服务器之家 > 正文

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

时间:2021-09-17 16:33     来源/作者:来日可期0726

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

下面由测试来验证:

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

创建表:

?
1
2
3
4
5
6
7
8
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;

创建存储过程:

?
1
2
3
4
5
6
7
8
9
10
11
12
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;

生成数据:

?
1
call my_insert();

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

下图是采用explain分析得出

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

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

?
1
2
3
4
5
6
7
8
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类型的

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

?
1
2
3
4
5
6
7
8
9
10
11
12
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();

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

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

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

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

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

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

原文链接:https://www.cnblogs.com/zhangmeng0726/p/15117820.html

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部