当前位置: 首页 > news >正文

PostgreSQL的字段存储类型了解

PostgreSQL的字段存储类型了解

在 PostgreSQL 中,每个字段(列)都有其存储类型,这些存储类型决定了数据库如何存储和处理该字段的数据。了解和适当地利用这些存储类型,可以提高数据库的性能和存储效率。

主要的存储类型

在这里插入图片描述

PostgreSQL 提供了四种主要的存储类型:

  1. PLAIN(p): 不允许 TOAST,数据始终存在于数据页中。适用于较短的数据类型,如整数和短的字符串。
  2. MAIN(m): 默认行为,尽可能在数据页中存储数据,若超出空间限制则使用 TOAST 进行外部存储,但不会压缩。
  3. EXTERNAL(x): 将数据存储在 TOAST 表中,但不压缩数据。适用于较大的数据块,需要避免压缩开销时。
  4. EXTENDED(e): 使用 TOAST 表,首先尝试压缩数据,如果压缩无效则使用外部存储。是 TOAST 表存储的默认方式。

注意: TOAST (The Oversized-Attribute Storage Technique) 是 PostgreSQL 用于存储超大数据的一个方法。

检查字段的存储类型

要检查特定字段的存储类型,可以查询系统视图 pg_attribute

SELECT attname, attstorage
FROM pg_attribute
WHERE attrelid = 'your_table'::regclass
AND attname = 'your_column';

其中 attstorage 的值为:

  • p: PLAIN
  • m: MAIN
  • x: EXTERNAL
  • e: EXTENDED

更改字段的存储类型

使用 ALTER TABLE ... SET STORAGE 语句可以更改字段的存储类型。

-- 更改字段的存储类型为 EXTENDED
ALTER TABLE your_table
ALTER COLUMN your_column SET STORAGE EXTENDED;-- 更改字段的存储类型为 MAIN
ALTER TABLE your_table
ALTER COLUMN your_column SET STORAGE MAIN;-- 更改字段的存储类型为 EXTERNAL
ALTER TABLE your_table
ALTER COLUMN your_column SET STORAGE EXTERNAL;-- 更改字段的存储类型为 PLAIN
ALTER TABLE your_table
ALTER COLUMN your_column SET STORAGE PLAIN;

存储类型的适用场景

  1. PLAIN:

    • 用于无法使用 TOAST 技术的字段,比如短整型、布尔型等。
    • 数据较短且频繁访问,不需要额外存储操作。
  2. MAIN:

    • 默认存储方式,适用于大部分数据。
    • 数据不特别长,适用一般用途。
  3. EXTERNAL:

    • 适用于需要存储长数据但不希望压缩的场景。
    • 比如当压缩和解压缩数据代价较高或时间紧迫的应用。
  4. EXTENDED:

    • 常用于大字段,比如文本、大对象。
    • 数据会被压缩并在必要时外部存储,以节省空间。

小结

通过理解和合理选择字段的存储类型,可以帮助提高 PostgreSQL 数据库的性能和存储效率。PLAINMAINEXTERNALEXTENDED 各有其使用场景,根据具体需求和数据特性选择合适的存储策略是数据库优化的重要一环。正确配置和使用 TOAST 与 PGLZ 压缩,也能有效节约存储空间,提升性能。

http://www.lryc.cn/news/450642.html

相关文章:

  • CTFshow 命令执行 web29~web36(正则匹配绕过)
  • 【顺序表使用练习】发牌游戏
  • 1.7 编码与调制
  • 004集—— txt格式坐标写入cad(CAD—C#二次开发入门)
  • CSS中的font-variation-settings:探索字体的可变性
  • 组合优化与凸优化 学习笔记5 对偶拉格朗日函数
  • 监控易监测对象及指标之:Exchange邮件服务器监测
  • 【机器学习基础】Transformer学习
  • mysql如何不使用窗口函数,去统计出入库情况
  • uni-app canvas文本自动换行
  • 【设计模式-职责链】
  • Prompt:在AI时代,提问比答案更有价值
  • whatis命令:关于命令的简短描述
  • ICM20948 DMP代码详解(54)
  • RabbitMQ的应用问题
  • C++14:通过make_index_sequence实现将tuple转换为array
  • Linux中修改MySQL密码
  • 华为OD真题机试-英文输入法(Java)
  • 【React 】入门Day01 —— 从基础概念到实战应用
  • 2024年9月总结及随笔之丢卡
  • sql语法学习 sql各种语法 sql增删改查 数据库各种操作 数据库指令
  • 鸡兔同笼,但是线性代数
  • 01---java面试八股文——springboot---10题
  • 计算机毕业设计 二手图书交易系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 【进阶OpenCV】 (3)--SIFT特征提取
  • HarmonyOS/OpenHarmony Audio 实现音频录制及播放功能
  • css 中 ~ 符号、text-indent、ellipsis、ellipsis-2、text-overflow: ellipsis、::before的使用
  • Activiti 工作流大致了解
  • 速盾:高防 CDN,网站安全的有力保障
  • 宝塔搭建nextcould 30docker搭建onlyoffic8.0