首页 > 数据库 >数据库使用uuid的影响

数据库使用uuid的影响

时间:2023-09-14 11:44:17浏览次数:65  
标签:自增 uuid 数据库 无序 插入 有序 使用 主键

关于数据库主键性能差异

比较对象:(自增主键、有序uuid、无序uuid)

前置条件:根据自增主键、有序uuid、无序uuid相同环境相同条件新增3张测试表,分别向每张表插入5020000数据

1、插入性能:

插入耗时对比:

  • 自增:91257ms
  • 有序uuid:98779ms
  • 无序uuid:275468ms

2、对比页的分裂数

  • 自增page_count:61993

  • 有序page_count:71857

  • 无序page_count:100417

3、对比表占用的大小

  • 自增Table Size (MB):484.320312

  • 有序Table Size (MB):561.382812

  • 无序Table Size (MB):784.507812

空间性能三项对比:自增 > 有序uuid > 无序uuid

造成如此差异原因:

参考ABP.Vnext 原话(https://docs.abp.io/zh-Hans/abp/latest/Guid-Generation):

使用默认的Guid.NewGuid()带来的影响:

  1. 空间的浪费以及由此带来的读写效率的下降。
  2. GUID的生成是基于算法和计算机的唯一标识符(如MAC地址) 等因素。由于GUID的生成不是连续的,因此在将其用作表的主键并设置为聚集索引时,插入新记录可能需要对已存在的记录进行重新排序,为当插入新记录时,数据库系统需要将数据页重新排序,以便为新记录腾出空间。这可能涉及到数据页的分裂或合并操作,这些操作会导致额外的磁盘1/0和处理开销。
  3. 由于在存储设备上的物理位置不连续,从而导致存储碎片化(page数据分裂太多,页不完整)。影响查询性能,因为数据库需要在磁盘上跳跃访问不连续的数据块
  4. 当使用GUID作为主键并将其设置为聚集索引时,每次插入新记录时,都可能导致已有记录的物理位置发生改变

因为数据库索引是由B+树组成的:对比有序id和无序id,插入过程图解

插入过程:

有关页合并与分裂图解文章参考:

https://zhuanlan.zhihu.com/p/98818611

标签:自增,uuid,数据库,无序,插入,有序,使用,主键
From: https://www.cnblogs.com/kkbk/p/17702129.html

相关文章

  • MySQL 和 Python:无缝结合的数据库应用
    MySQL和Python都是广泛应用于软件开发的重要工具。MySQL是一种强大的关系型数据库管理系统,而Python则是一种灵活的高级编程语言。它们之间的紧密集成为开发人员提供了强大的数据存储和操作能力。本文将探讨MySQL和Python之间的关系,并提供一些示例代码来演示如何在Python......
  • 态路小课堂丨光纤跳线的使用与维护小指南
    TARLUZ态路在光通信领域中,光纤跳线扮演着至关重要的角色。它作为一种用于连接光纤设备之间的光纤连接线,可以根据实际需求进行定制,以此来满足不同网络拓扑和连接方式的要求。在安装光纤跳线时,遇到的问题可能会对整个通信系统的性能和稳定性产生影响。本文态路通信将为您简单介绍光纤......
  • 运动控制卡使用教程(二)
    常用回零方式 1限位回原点(用于装有限位开关而未装有零点开关,精度要求不高的场景)a,调用回原点指令b,电机以较高速度运动到限位,c,碰到限位后反向运动,d,脱离限位后再以较低速度往限位方向动,e,再次碰到限位时停止运动,所听位置即为我们要找的原点。此种方式用的最多,很多模组......
  • 7、数据库在磁盘上的存储
    数据库在磁盘上的存储首先弄清楚磁盘的几个概念磁盘面:磁盘一般会由多个磁盘片组成,一般都控制在5片以内,每个磁盘片包含两个面。磁盘片从下向上从0开始,比如最下边的磁盘块是0面和1面,依次往上走。磁头:通过磁性原理读取磁盘数据的部件,每个磁盘面都对应有个读/写磁头。3.内存......
  • fastadmin 的基本使用和一些复杂
    使用btn-addtabs新选项卡打开之后如何关闭或者返回`返回上一层`<aonclick="window.top.location.href='你返回的路径url,或者用js事件获取上层路径'"href="javascript:"><iclass="fafa-arrow-left"></i></a> 如何导出下面的数据添加按钮事件class="......
  • 使用python进行数据同步,根据游标的方式
    使用python进行数据同步,根据游标的方式一、介绍:数据同步分为好几种,比如根据最大id排序,其次才是根据游标进行排序。为什么不使用最大id进行数据同步?如下:因为如果数据表中的数据是按照降序排序的,那么每次根据最大id取1000条数据的方式也是一种可行的分页查询方式。这种方式的优......
  • 使用pyinstaller和electron将python打包为桌面端应用,无法在win7上执行
    在win10或win11上开发的软件,直接在win7上运行,可能导致下面的问题(python3.11electron23.*)(python3.7electron23.*) 原因在于:win10或win11上的开发环境(如python版本,electron版本)过高,win7不支持该环境。解决办法:降低python版本和electron版本,如:win7支持的python3.7和electron1......
  • js中使用0 “” null undefined {}需要注意 if判断时候都是false,比如判断接收后台数
    js中使用0“”nullundefined{}需要注意if判断时候都是false,比如判断接收后台数据if(data.info){}注意:在js中0为空(false),代表空的还有“”,null,undefined;如果做判断if(!上面的四种值);返回均为false?1234567console.log(!null);//trueconsole.log(!0);//trueconsole.lo......
  • 【腾讯云 Cloud Studio 实战训练营】Cloud Studio 使用分享 及ant-desing-pro 项目创
    【腾讯云CloudStudio实战训练营】CloudStudio使用分享及ant-desing-pro项目创建一、CloudStudio简介及登录1.简介首先附上官网地址,有兴趣的同学可以前去官网查看学习。CloudStudio_在线编程_在线IDE_WebIDE_CloudIDE_VSCode-腾讯云CloudStudio是基于浏览器......
  • Learn Git in 30 days——第 17 天:关于合并的基本观念与使用方式
    写的非常好的一个Git系列文章,强烈推荐原文链接:https://github.com/doggy8088/Learn-Git-in-30-days/tree/master/zh-cn 我曾在【第08天:关于分支的基本观念与使用方式】提过关于「分支」的基本观念与用法,现在则要来讲「合并」如何进行。由于Git是一种分布式版本控制系统(......