使用逗号分隔列连接sql列

时间:2014-01-10 20:24:53

标签: sql tsql join

我有三张看起来像

的表
table1
ID    Title      Description  
1     Title1     Desc1   
2     Title2     Desc2

table2
ID    HistoryID
1     1001
2     1002
2     1003
2     1004

table3
HistoryID Value
1001      val1
1002      val2
1003      val3
1004      val4

现在我打算使用“仅”两个表

table1
ID    Title      Description     HistoryIDList
1     Title1     Desc1           1001
2     Title2     Desc2           1002,1003,1004

table3
HistoryID Value
1001      val1
1002      val2
1003      val3
1004      val4

我创建了一个sql table-value函数,它将返回可以与table3中的HistoryID连接的索引值1002,1003,1004。

由于我正在失去规范化,并且没有历史IDID的FK,我的问题是

  • 运行将加入HistoryIDList
  • 的查询会出现严重的性能问题
  • 将索引sql函数做或不做,因为两列之间没有关系。

在这种情况下是否可以在sql函数中创建的表上添加FK?

1 个答案:

答案 0 :(得分:3)

为什么要将良好的数据结构更改为虚假的数据结构?两个表版本是一个糟糕的选择。

是的,与简单的equi-join相比,从单个ID加入列表时存在显着的性能差异。并且,与通常情况一样糟糕,情况更糟糕,因为id的类型可能是原始表中的int和另一个表中的字符串。

如果不使用触发器,则无法在建议的结构中强制执行外键关系。

您唯一可以提高性能的方法是在HistoryIdList列上添加全文索引。这可能会加快处理速度。再次,由于您使用的是数字ID,这很复杂。

我的建议:就是不要这样做。保持表结构不变,因为这是关系数据库的最佳结构。

相关问题