当前位置:网站首页>PG--核心技术--HOT
PG--核心技术--HOT
2022-08-11 11:32:00 【51CTO】
索引更新问题
因为多版本的原因,当PostgreSQL中更新一行时,实际上原数据行并不会被删除,只是插入了一个新行。如果表上有索引,而更新的字段不是索引的键值时,由于新行的物理位置发生了变化,仍然需要更新索引,这将导致性能下降。
引入HOT
为了解决这一问题,PostgreSQL自8.3版本之后引入了一个名为“Heap-Only Tuple”的新技术,简称HOT。使用HOT技术之后,如果更新后的行与原数据行在同一个数据块内时,原数据行会有一个指针,指向新行,这样就不必更新索引了,当从索引访问到数据行时,会根据这个指针找到新行。
HOT的原理
HOT的详细说明见下图,图中表上有一个索引,其中“索引项n”指向某个数据块的第3行。

更新第3行后使用HOT技术,索引项仍然指向原数据行(第3行),而第3行原数据行中有一个指针指向新数据行(第6行)

HOT的使用和配置
注意,如果原先的数据块中无法放下新行就不能使用HOT技术了,即HOT技术中的行之间的指针只能在同一个数据块内,不能跨数据块。所以为了使用HOT技术,应该在数据块中留出较大的空闲空间,其方法是可以把表的填充因子“fillfactor”设置为一个较小值。该参数的含义是插入数据时,表中的空间占用率到达多少后就不再插入数据了,默认值为“100”,表示不预留空间,但对于删除、插入、更新等操作较多的表来说,需要设置一个较低的值,如50%。该参数可以在建表时设置,命令如下
也可以使用ALTER TABLE命令来修改该参数配置
边栏推荐
- C# Call AutoNavi Map API to obtain latitude, longitude and positioning [Detailed 4D explanation with complete code]
- class 继承的重点
- Ince-Gaussian模式
- 在这个数字化的时代,如何做好用户体验与应用性能管理
- 五分钟教你内网穿透
- 自动售货机
- 如何在游戏中实现一场下雨效果
- B端产品需求分析与优先级判断
- The old saying: The interview must ask "Three handshakes, four waves", so you can't forget it
- 工程师如何对待开源 --- 一个老工程师的肺腑之言
猜你喜欢
随机推荐
在这个数字化的时代,如何做好用户体验与应用性能管理
Go-Excelize API源码阅读(七)—— CopySheet(from, to int)
rem如何使用
何为API服务网关
从滴滴被罚款事件思考企业数据治理问题
1.MySQL ----数据库的基础操作
参与openEuler社区不到1年,我成为了Maintainer……
阿里云 Hologres助力好未来网校实时数仓降本增效
从抖音到火山引擎——看流媒体技术演进和机会
go语言学习:并发编程(定时器/select/并发安全锁)
class 继承的重点
反射获取DLL中的字段、属性、方法、泛型方法(C#)
Through the thermal lens focus on different types of gaussian model
鸿海董事长刘扬伟:市场对智能手机和其他消费电子产品的需求正在放缓
[Study Notes] Maximum matching of general graphs
Five minutes to teach you intranet penetration
悠漓带你玩转C语言(详解操作符1)
独家采访 | 智能源于自发产生而非计划:进化论拥趸,前OpenAI研究经理、UBC大学副教授Jeff Clune
Volatile关键字的作用
低延时实时音视频在5G远程操控场景的应用实践









