停止在你的数据库中使用UUID

在数据库中唯一标识行的最常见方法之一是使用UUID字段。然而,这种方法带来了需要注意的性能问题。

本文将讨论在使用UUID作为数据库表中的键时可能出现的两个性能问题。

我们直接进入正题!

什么是UUID?

UUID代表通用唯一标识符(Universally Unique Identifier)。UUID有很多版本,但在本文中,我们将讨论最流行的版本:UUIDv4

以下是UUIDv4的一个示例:

b9c0927e42fe9a6ed7736dba8e86a66e.png

问题1 —— 插入性能

当向表中插入新记录时,必须更新与主键相关的索引以保持最佳查询性能。索引是使用B+树数据结构构建的。

对于UUIDv4来说,重新平衡过程变得非常低效。这是因为UUID的固有随机性,使得保持树的平衡变得更加困难。当你的数据规模扩大时,需要重新平衡数百万个节点,这显著降低了使用UUID键的插入性能。

问题2 —— 更高的存储需求

我们考虑一个带有自动递增整数键的UUID的大小:

自动递增整数每个值消耗32位,而UUID每个值消耗128位。

每行UUID的存储空间是整数的4倍。

此外,大多数人以人类可读的形式存储UUID,这意味着UUID每个值可能消耗多达688位。这是整数的约20倍。

让我们通过模拟一个现实的数据库来评估UUID如何实际影响存储。

我们将使用Josh Tried Coding的示例表:

这个示例使用了Neon PostgreSQL数据库。

  • 表1将包含100万行UUID。

  • 表2将包含100万行自动递增整数。

以下是结果,让我们逐一分析每个统计数据:

d094440704acedfe4b560d41dbdac426.png

总表大小:考虑到两个表的大小,UUID表大约是整数表的2.3倍!

ID字段大小:单个UUID字段需要比等效整数字段多9.3倍的存储空间!

ID列大小:排除每个表中的其他属性时,UUID和整数列之间的大小差异为3.5倍!

结论

UUID是确保表中记录唯一性的好方法。然而,这些问题在大规模使用时尤为明显,因此对于大多数人来说,UUID实际上不会导致明显的性能下降。

尽管这些问题在大规模使用时普遍存在,但重要的是要了解在表中使用UUID的影响,并确保数据库设计的优化。

最后:

vue2与vue3技巧合集

VueUse源码解读

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/848614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SwiftUI中ScrollViewReader的使用(自动滚动ScrollView)

ScrollViewReader是我最喜欢的SwiftUI新版本的新功能之一。在iOS 14发布之前,控制ScrollView的滚动位置并不容易。如果希望滚动视图滚动到特定位置,我们必须找到自己的解决方案。 使用ScrollViewReader,只需几行代码,就可以使滚动…

SD NAND(贴片式TF卡)坏块管理技术问答

Q1:什么是NAND的块(Block))? 每个Nand包含一个或多个Chip。Chip是可以独立执行命令并上报状态的最小单元。 每个Chip包含一个或多个plane。不同的plane间可以并发操作,不过有一些限制。 每个plane包含多block,block是最小擦除单元(擦除后为…

一文了解如何安全有效的进行PB级别的大数据迁移

在这个信息量爆炸的时代,处理PB级别的数据转移已成为常态,但对企业而言,这仍然是一个充满挑战的任务。今天,我们来探讨一下这个话题,看看在进行PB级数据转移时,需要留意哪些事项,可能会遇到哪些…

B端数据看板,其实数据可以更美的。

B端数据看板可以通过设计来提升其美观度。 色彩和配色方案: 选择适合品牌和数据类型的色彩搭配方案。使用渐变色、明亮的色调和对比度来突出重要的数据指标。 数据可视化: 使用图表、图形和数据图像来呈现数据,使其更易于理解和解读。选择…

报考PMP机构,主打一个听劝

近期PMP报考着实是火了一把,看到身边很多的朋友都考了PMP,搞得我心头痒痒的,后来了解了一下大家报考PMP的初衷,大家都是为了自我提升和升职加薪,有的人拿到PMP证书已经实现了升职加薪了。身边的朋友都劝我去考PMP证书&…

基于STC89C52单片机空气PM2.5系统设计资料

#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char //宏定义sbit RSP1^6;//液晶接口sbit ENP1^7;sbit LED P2^0;//粉尘传感器控制接口sbit ADCS P3^7;//AD0832接口sbit ADCLK P3^5;sbit ADDI P3^6;sbit ADDO P3^6;…

线性dp+数论分块,1561D1 - Up the Strip

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1561D1 - Up the Strip (simplified version) 二、解题报告 1、思路分析 一眼dp 写出dp方程&#xff1a; 前者维护前缀和即可O(1)转移 后者呢&#xff1f;——整除分块数论分块问题-CSDN博客 简单叙述下…

Day15:二叉树层序遍历 LeedCode 102.二叉树的层序遍历 199二叉树的右视图 637.二叉树的层平均值 101.对称二叉树 226.翻转二叉树

详细讲解,点击跳转 102. 二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3]…

防病毒克星——白名单可信系统

白名单作为一种网络安全措施&#xff0c;其核心概念在于限制用户只能访问网络所有者定义的受信任内容。这种机制在保护系统免受恶意软件、病毒等攻击方面发挥着重要作用。然而&#xff0c;关于白名单是否可以防病毒的问题&#xff0c;实际上涉及了多个方面的考虑。 首先&#x…

解决uboot编译multiple definition of yylloc报错

编译u-boot时报错&#xff1a;multiple definition of yylloc 解决办法&#xff1a;找到源码目录下的script/dtc/dtc-lexer.l文件&#xff0c;第41行&#xff0c;用extern修饰一下yylloc 即可解决

Java装饰器模式,装饰器模式通常通过创建一个接口和一个或多个实现了该接口的类来开始,然后创建装饰器类,这些类也实现了相同的接口

1、定义一个接口Component public interface Component { void operation(); }2、创建一个实现了Component接口的简单类SimpleComponent public class SimpleComponent implements Component { Override public void operation() { System.out.println("SimpleCom…

如何在 Mac 上使用 Windows 版 Excel 的全部功能

作为 Mac 用户&#xff0c;你是否怀念 Excel 的一些关键功能&#xff1f;是不是在 Mac 版 Excel 中找不到全面的 VBA、Active X 和表单控件、智能标签、Power Pivot 等关键工具&#xff1f;Mac 用户们&#xff0c;其实你不必错过这些功能。终极解决方案就是&#xff1a;通过 Pa…

CR80通用清洁卡:证卡打印机、ATM机、POS机、读卡器等卡片设备清洁维护的好助手!

随着科技的进步&#xff0c;ATM机、POS终端、门禁系统、证卡打印机、读卡器等卡片设备在我们的日常生活中扮演着越来越重要的角色&#xff0c;些设备在长时间使用和环境因素的影响下&#xff0c;容易积聚油脂、灰尘和其他污染物&#xff0c;从而对其性能和功能产生负面影响。 深…

外企跨国大数据迁移的注意事项

跨国数据迁移&#xff0c;对汽车行业来说&#xff0c;是一桩大事。跨国公司在进行这一操作时&#xff0c;会遇到不少挑战&#xff0c;比如网络延迟、数据安全、成本控制等等。今天&#xff0c;咱们就聊聊跨国大数据迁移中&#xff0c;跨国车企需要留意的几个关键点。 跨国大数据…

重学java 64.IO流 字符流

Action speak louder than words —— 24.6.5 字符输入流 一、字节流读取中文的问题 1.注意&#xff1a; 字节流是万能流&#xff0c;这个万能更侧重于文件复制&#xff0c;但是尽量不要边读边看 2.原因&#xff1a; UTF-8&#xff1a;一个汉字占三个字节 GBK&#xff1a;一…

linux和 qnx 查看 网卡网络流量

netstat -i netstat -i和-s-CSDN博客

Windows 2000 Server:安全配置终极指南

"远古技术&#xff0c;仅供娱乐" &#x1f4ad; 前言&#xff1a;Windows 2000 服务器在当时的市场中占据了很大的比例&#xff0c;主要原因包括操作简单和易于管理&#xff0c;但也经常因为安全性问题受到谴责&#xff0c;Windows 2000 的安全性真的那么差吗&#x…

虹科免拆诊断案例 | 2013 款路虎神行者 2 车偶发性无法起动

故障现象 一辆2013款路虎神行者2车&#xff0c;搭载2.0 L Si4 Petrol发动机&#xff0c;累计行驶里程约为4.5万km。车主反映&#xff0c;车辆偶发性无法起动&#xff0c;故障出现时&#xff0c;尝试起动发动机&#xff0c;组合仪表上会出现“挡位不在驻车挡”“充电系统故障”…

【阿里云】在云服务器ECS 安装MySQL、本地远程连接或宝塔连接(手动部署)

目录 一、安装MySQL 二、配置MySQL 三、远程访问MySQL数据库 四、Navicat本地连接远程MySQL 五、宝塔连接MySQL 如果你是使用宝塔安装的MySQL请绕过&#xff0c;以下是通过命令行模式&#xff08;手动部署&#xff09;进行安装、配置及运行。 安装&#xff1a;MySQL8.0 …

【golang学习之旅】Go中的cron定时任务

系列文章 【golang学习之旅】报错&#xff1a;a declared but not used 【golang学习之旅】Go 的基本数据类型 【golang学习之旅】深入理解字符串string数据类型 【golang学习之旅】go mod tidy 【golang学习之旅】记录一次 panic case : reflect: reflect.Value.SetInt using…