我在PostgreSQL中有一列是文本数据类型.但它真正坚持的是四种价值观,它们是:

EOS,EOS in 6 months,EOS in 12 months, EOS in 24 months

我总是执行相同类型的查询,这将取决于用户输入,但它将包含一个或多个上述值,如下所示:

select * from table
where text_column in 
('EOS','EOS in 6 months','EOS in 12 months', 'EOS in 24 months') 

我想知道如果我将数据类型从文本转换为枚举,我是否会获得任何性能优势?

推荐答案

这里唯一万无一失的答案是"你需要对其进行基准测试".

话虽如此,如果您only为相等编写此列的文本(请记住,in运算符只是编写多个相等测试的一种奇妙方式),并且您为该列指定了有限数量的有效值,则使用枚举值是有意义的--值更短(单个整数值与更长的字符串),因此它将存储得更紧凑,从而导致更高效的磁盘读取.

TL;DR -在这里使用枚举可能是一个好主意,但您应该对其进行基准测试.

Postgresql相关问答推荐

Postgs密码重置问题

读取扩展坞合成中的UDP:IO/超时

在插入时创建一个触发器,在PostgreSQL中的另一个表上创建另一个触发器

PostGresql :正则表达式 Select 其中只有一个正斜杠的行

从单选插入到多个表

JPA findBy 字段忽略大小写

如何在 Sequelize ORM 中插入 PostGIS GEOMETRY 点?

Django + Postgres + 大时间序列

sql:转换参数 $1 类型:不支持的类型 []int,in 的一部分

保存 geodjango PointField 时出错

冲突中的 Postgres 会更新复合主键

PostgreSQL ,从 2 个表中 Select ,但仅从表 2 中 Select 最新的元素

SQLAlchemy、Psycopg2 和 Postgresql 复制

在 postgres 中Decode解码相似的函数

PostgreSQL 可以对数组元素有唯一性约束吗?

在 row_to_json 函数中 Select 查询

python pip install psycopg2 安装错误

PostgreSQL 中跨多个表的索引

为什么是||在 PostgreSQL/Redshift 中用作字符串连接

性能调优:为布尔列创建索引