多行或一列[sql性能]

时间:2010-08-01 01:09:39

标签: sql performance reddit

我正在努力应对这个简单的想法。 注册reddit,当你注册一个新帐户时......你会自动订阅一些默认频道。

我想对我的网站做同样的事情。

我知道我可以用id,user_id,chan_id

来做简单而愚蠢的 user_chan

如果是这样的:

ID | NAME
1  | videos
2  | pictures

user_chan 就像这样(我是用户1)

ID | USER_ID | CHAN_ID
1  | 1       | 1
2  | 1       | 2

我想在这里非常清楚:D

我猜这就是reddit的工作方式。但每次用户注册时,他们必须插入十几行。而且我猜他们有很多用户!!

用户表中的解决方案是否更加聪明?:

ID | USER_NICKNAME | CHANS
1  | me            | 1,2

2 个答案:

答案 0 :(得分:3)

不要使用一列来存储多个值。这是一种非规范化,后来会引起疼痛。例如,当您需要查询哪个用户有频道3时,您将不得不使用LIKE,这将表现不佳。当你只需要删除用户拥有的几个频道时,就会变得更难。

对于大多数数据库,您可以使用一个INSERT语句插入多行。确切的语法因平台而异;在SQL Server中,您可以这样做:

insert into user_chan
(USER_ID, CHANID)
select 7634, 3
union all
select 7634, 27
union all
select 7634, 9

答案 1 :(得分:0)

或者,使用XML列按照建议存储多个值。这可以有一个XML索引,可以像关系表一样查询/更新等(尽管语法更复杂)。