gpt4 book ai didi

sql - 使用 int 连接而不是字符串列更好吗?

转载 作者:行者123 更新时间:2023-12-05 00:21:59 25 4
gpt4 key购买 nike

假设我有一个有状态的用户,该用户的状态可以是“活跃”、“暂停”或“不活跃”。

现在,在创建数据库时,我想知道......是否有一个包含字符串值的列(使用枚举类型或应用规则)会更好,这样查询和了解当前用户状态会更容易还是加入更好,我应该加入包含可能的用户状态的 UserStatuses 表?

假设,应用程序用户当然不能创建状态。

编辑:一些说明

  1. 我将使用字符串连接,它将是 UserStatuses PK 的 int 连接
  2. 我最关心的是性能方面的问题
  3. 可能的状态ARE STATIC并且将NEVER改变

最佳答案

在大多数系统上,它对性能影响很小或没有影响。就个人而言,为了清晰起见,我会使用一个短字符串,并按照您的建议将其连接到包含更多详细信息的表格中。

create table intLookup
(
pk integer primary key,
value varchar(20) not null
)
insert into intLookup (pk, value) values
(1,'value 1'),
(2,'value 2'),
(3,'value 3'),
(4,'value 4')

create table stringLookup
(
pk varchar(4) primary key,
value varchar(20) not null
)

insert into stringLookup (pk, value) values
(1,'value 1'),
(2,'value 2'),
(3,'value 3'),
(4,'value 4')



create table masterData
(
stuff varchar(50),
fkInt integer references intLookup(pk),
fkString varchar(4)references stringLookup(pk)
)
create index i on masterData(fkInt)
create index s on masterData(fkString)

insert into masterData
(stuff, fkInt, fkString)
select COLUMN_NAME, (ORDINAL_POSITION %4)+1,(ORDINAL_POSITION %4)+1 from INFORMATION_SCHEMA.COLUMNS
go 1000

这会产生 30 万行。

select 
*
from masterData m inner join intLookup i on m.fkInt=i.pk

select
*
from masterData m inner join stringLookup s on m.fkString=s.pk

在我的系统上(SQL Server)- 查询计划、I/O 和 CPU 相同- 执行时间相同。- 查找表被读取和处理一次(在任一查询中)

使用 int 或字符串没有区别。

关于sql - 使用 int 连接而不是字符串列更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19964943/

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