gpt4 book ai didi

performance - (varchar 作为性能列的类型?

转载 作者:行者123 更新时间:2023-11-29 13:03:08 26 4
gpt4 key购买 nike

我在 PostgreSQL 中有一个名为“status”的列。首先它曾经是 integer 类型的“status_id” .这些值保留在客户端上,因此服务器上没有表称为状态,我会在其中保留这些状态然后执行 inner join与第一张 table 。

我曾经从客户端发送状态的 ID(它们在客户端上有名称)。然而,在某些时候我明白我最好让服务器保持这些状态。不是在单独的表中,而是在第一个表中,我想将它们设为字符串。所以初始表将有一个 status字符串类型的列( varchar ,更具体地说)。我读它不会那么慢。

一般来说,这是个好主意吗?我想这是因为做 inner join (以防我将状态保存在单独的表中)每次都很昂贵,而且从客户端发送 ID。

1) 我唯一担心的是 status 列应该是 char 类型, 不是 varchar .我想它应该使它更有效。是这样吗?

2) 如果第一种情况是正确的,那么我不确定我是否能够使用完全相同数量的字符来命名所有状态,比方说,5 个字符。其中一些可能更长,有些更短。我该如何解决这个问题?

更新:

这不是剥夺国籍,因为我说的是一张单 table 。没有也从未有过名为 Statuses 的第二个表,其中包含字段 (id, status_name)。

我想表达的是,我可以将 char(n) 用于 status_name 并在其上添加索引。那么它应该足够快。然而,可能或不可能用特定 (n) 个字符数来命名所有状态,这是唯一的问题。

最佳答案

我不认为使用 char 或 varchar 代替整数是个好主意。很难预计它会比整数 PK 慢多少,但这种设计会更慢——当你将加入更大的表时,影响会更可怕。如果可以,请改用 ENUM 类型。

http://www.postgresql.org/docs/9.2/static/datatype-enum.html

CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');

CREATE TABLE person (
name text,
current_mood mood
);
INSERT INTO person VALUES ('Moe', 'happy');
SELECT * FROM person WHERE current_mood = 'happy';
name | current_mood
------+--------------
Moe | happy
(1 row)

PostgreSQL varchar 和 char 类型非常相似。内部实现是相同的——由于空格的添加,char 可能(这是矛盾的)有点慢。

关于performance - (varchar 作为性能列的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22942142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com