PostgreSQL中uuid_generate性能缓慢

3
我们计划将我们的项目从MySql迁移到Postgres。我们需要使用Guid作为主键。我们的一些表需要插入大量数据。我们注意到在Postgres中使用UUID时性能较慢。下面的SQL语句需要16秒才能生成10K个uuids。 select uuid_generate_v4() from generate_series(1,10000) 而MySQL只需要700毫秒就可以生成100K个GUID。
我错过了什么吗?
环境:
Postgres11 on Windows 10

你使用什么工具运行那个查询?你测量的时间是否包括显示生成的ID?当你使用 explain analyze select uuid_generate_v4() from generate_series(1,10000) 时报告的时间是多少?MySQL会生成哪种类型的UUID? - user330315
1个回答

5
您可以尝试使用pgcrypto提供的函数,如帮助页面中所述(滚动到底部)。在我的电脑上,以下查询仅需不到120毫秒即可执行。
select gen_random_uuid() from generate_series(1,10000)

好的观点 - 这就是为什么我问MySQL正在生成哪种类型的UUID。而MySQL的文档似乎表明了相同的差异:“接口的MAC地址仅在FreeBSD和Linux上考虑。在其他操作系统上,MySQL使用随机生成的48位数字”。因此,在Windows上,它将是一个随机值,与pgcrypto的gen_random_uuid()完全相同。 - user330315
顺便说一下:在我的笔记本电脑上,explain analyze select gen_random_uuid() from generate_series(1,10000) 只需要4毫秒,而 explain analyze select uuid_generate_v4() from generate_series(1,10000) 确实要慢得多:它需要3秒(这仍然远远低于问题中提到的16秒)。 - user330315
太好了,谢谢!100000个操作只花了167毫秒。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接