数据库最近学到的小知识(一

由于大部分内容都是再网上看的,可能会存在一些不正确的地方

对于线上业务的一些数据是选择物理删除还是逻辑删除?

由于最近在收集看一些数据库的东西,恰好昨晚听直播UP主说了这个问题部分内容可能记不太清了。

直接删除

  • 1.直接一个观点可能是会省一些存储空间,直接删除会释放些空间
  • 2.本来就是无用的数据放在那里占地方,还影响查询速度

逻辑删除

  • 1.数据可能后面会有些用,用到的时候可以再恢复
  • 2.有问题的数据的变更记录再库里面保存着可以用于历史追踪
  • 3.本来delete系统也走的是逻辑删除

观点大概分两类,但是和今天讨论的内容有哪些关系?

今天说的就是deleted删除的内容

  • 1.问:数据库中的删除操作实际是怎么进行的?
  • 答:数据库中的数据删除是逻辑删除的(PG的库中可以直接查xmin,xmax,cmin,cmax,txid_current()。其中xmin是数据被写入的时候写入的系统事务编号,xmax是数据再被修改或者删除的时候写的的事务编号,当xmax位置有值的时候意味这这条数据是被删除的)。
  • 2.问:系统存储的碎片化怎么来的
  • 答:根据上面的说法,就是有删除不是直接抹除的而是进行打标记,慢慢积累就碎片化严重了。

还有个问题就是更新也有点困扰

举个例子 某个字段VARCAHR2(50) 当前的数据是 Hello,想修改为Hello,World!。也想修改为Hi。

  • 问题的来源:磁盘上的数据是按照顺序写入的(内存的话我们不必关心数据指向的位置我们只需要设计结构就可以了,但是存储的数据我们却要考虑这个问题因为我们要把数据反向映射为我们需要的结构),也就是一个萝卜一个坑每条数据相邻的上面和下面都是有数据的。
  • 修改方式1.存的时候有些预留空间直接修改。但是这样有个问题就是空间利用率不高。
  • 修改方式2.修改的时候如果修改的这个新值的长度小于等于原有的我就直接再原有基础上进行处理。但是这里也有个问题如果字符数据小的话磁盘上相邻的下个数据的读取问题。
  • 修改方式3.原有的数据打删除标记,然后再新添加一条数据。这里有个问题就是利用率的问题,需要文件有整理的工具,还可以再新增数据的时候如果老的坑可以满足那么就用去覆盖老坑但这里就会出现跟修改2一样的一个问题长度不是恰好切合的时候,后面数据读取的问题。
相关推荐
wdfk_prog10 小时前
嵌入式面试真题第 10 题:高优化等级下共享状态可见性、内存模型与系统级同步设计
java·linux·开发语言·面试·职场和发展·架构·c
卓怡学长10 小时前
w255基于springboot仓库管理系统
java·数据库·spring boot·spring·intellij-idea
2501_9419820511 小时前
企业微信二次开发:私域数据基石——三大核心基础能力接口实战
windows·架构·bootstrap·企业微信
谭光志11 小时前
Vibe Coding 时代,程序员该何去何从
前端·后端·ai编程
胡萝卜术12 小时前
RAG 的知识炼油厂:从原始网页到可检索知识块的工程化之路
面试·架构·github
GoGeekBaird12 小时前
我用 BeeWeave 跑完了一次完整写作闭环
后端·github
wdfk_prog12 小时前
嵌入式面试真题第 11 题:RTOS 优先级翻转与实时任务阻塞的通用治理
c语言·缓存·面试·职场和发展·架构
Sirius Wu12 小时前
OpenClaw Skill:Matplotlib 可视化技能 + 沙箱双层隔离完整详解
服务器·网络·人工智能·安全·ai·架构·aigc
J-Tony1113 小时前
【Redis】 Redis 是单线程还是多线程
服务器·数据库·mysql
这个DBA有点耶13 小时前
SQL调优进阶:从“优化一条SQL”到“优化一个系统”的思维升级
java·大数据·数据库·sql·程序人生·dba·改行学it