use*_*603 5 postgresql optimization storage
细读一下这个:
CREATE TABLE test
(
id bigserial,
timestamp timestamptz NOT NULL DEFAULT now(),
"a text column" text NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO test ("a text column") VALUES ('This is a text.');
INSERT INTO test ("a text column") VALUES ('This is a text.');
INSERT INTO test ("a text column") VALUES ('This is a text.');
Run Code Online (Sandbox Code Playgroud)
PostgreSQL 似乎存储“这是一段文本”。三次单独的时间,而不是一次,并通过内部自动参考重复的次数。这意味着我的表在短短几个小时内就变得巨大,即使它一遍又一遍地只保存相同的几个字符串......我自然希望它只存储每个字符串一次,坦率地说,我仍然以某种方式期望每次都会这样时间,但如果没有,我会感到惊讶。
我可以用我现有的知识做到这一点(并且已经做过很多次):
CREATE TABLE test
(
id bigserial,
timestamp timestamptz NOT NULL DEFAULT now(),
helperid bigint,
PRIMARY KEY (id)
);
CREATE TABLE "test helper"
(
id bigserial,
"a text column" text NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (helperid) REFERENCES test (id)
);
Run Code Online (Sandbox Code Playgroud)
但是,我现在需要在插入每条记录之前编写一个愚蠢的检查,以确保它不在“测试助手”表中。基本上,我可以让它工作,但这是一项繁重的工作,烦人,令人筋疲力尽,而且我得到了另一个愚蠢的表,它堵塞了命名空间,并且在我的表列表中通常看起来很丑陋。
这感觉像是一个常见问题,几乎和非常好的bigserial机制一样常见,那么为什么没有这样的功能呢?或者有吗?我可以做这样的事情吗?
CREATE TABLE test
(
id bigserial,
timestamp timestamptz NOT NULL DEFAULT now(),
"a text column" smartstoragetext NOT NULL,
PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)
通常,一个表会有多个文本列,其中有很多重复/通用值。为每个这样的列制作一个“辅助表”感觉很愚蠢。这真的不可能是“你如何做到这一点”......
简单地使文本列成为索引是没有帮助的,除非我完全误解了索引是什么。也许是一种特殊的索引?只要它是内置的,我就洗耳恭听。
| 归档时间: |
|
| 查看次数: |
719 次 |
| 最近记录: |