数据库优化 - 编码字段

标签 database postgresql database-design relational-database

一些理论问题。

只是想知道是否有优化数据字段的方法?

假设对于给定的字段,您只有 3 个可能的字符串,但由于某种原因它们很长(比如 50 个字符),将该字段声明为 character_varying(50) 似乎浪费了大量磁盘空间,因为数据基本上可以容纳2 位。

我想您可以通过 JOINing 标签表来解决问题,但是还有其他更合适的方法吗?或者数据库是否能够自行自动优化这种列?

普通数据库是否能够处理自己的这种优化? 有没有办法在数据库中声明这种结构(类似于 R 语言因子概念)? Postgresql 域结构对优化有帮助吗?

一些背景:

在您认为这是一个愚蠢的问题之前。我一直在使用旧的遗留系统(90 年代初),其中所有内容都经过大量编码以节省内存和性能(例如,性别将被编码为 (1,2) 而不是 (male,female) 和许多不太明显的编码)。

现在我们正在将系统迁移到更现代的数据库 (postgresql),希望我们能够使用可读的“纯文本”字段。

我并不真正关心实际性能。更多的是一个理论问题。

最佳答案

我认为您正在寻找必须专门创建的“枚举”数据类型,它将数据保存为整数,但在 SELECT 时将其转换为字符串

例如

CREATE TYPE my_specific_text_field AS ENUM
(
'string one with longish text',
'second string with fairly long text',
'third string'
);

CREATE TABLE test (
id serial not null primary key,
myenum my_specific_text_field
);

INSERT INTO test (myenum) VALUES ('string one with longish text');

也就是说,如果您不熟悉枚举,枚举可能会有点麻烦,导出枚举可能会很棘手,而且我相信它们的长度上限为 63 字节。

关于数据库优化 - 编码字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25640884/

相关文章:

javascript - 如何对存储在组合框中的数据库结果进行排序

mysql - 将歌词存储在 MySQL 数据库中

postgresql - 无法连接到我在 Azure 中新创建的 postgresql 服务器

sql - SELECT 查询何时开始返回行?

mysql - 如何在MySQL数据库中表示 “Recurring Events”?

database - 如何使用 Sequelize Migrations 删除非键列而不删除相关记录?

mysql - SSD : Tools and Strategies 上的基准 MySQL

postgresql - Postgres : Getting a total related count based on a condition from a related table

sql - 为有异常(exception)的重复事件设计的数据库

mysql - 计算mysql列中的行数