多表连接以提高性能?

时间:2010-03-08 23:52:40

标签: sql sql-server tsql

如果我有这样的表结构:

交易[TransID,...]

文档[DocID,TransID,...]

签名者[SignerID,...]

签名[SigID,DocID,SignerID,...]

业务逻辑是这样的:

  • 交易可以有多个文件
  • 文档可以有多个签名
  • 同样的签名者可以 有多个签名 内有多个文件 同一笔交易

所以,现在问我的实际问题:

如果我想查找特定事务中的所有文档,那么在性能方面是否更好,如果我还将TransID和DocID也存储在Signer表中,那么我的联接会更小。否则,我必须通过Signature>加入。文件>交易>获取该签名者交易中所有文件的文件。

我认为在Signer表中拥有那么多关系真的很麻烦,但这样做似乎并不“正确”(也似乎是更新的噩梦)但是我可以看到它可能会有更好的表现直接连接。想法?

TIA!

3 个答案:

答案 0 :(得分:11)

使用normalized版本。只有在性能成为问题时才重新考虑。另一种选择是维护危险。

答案 1 :(得分:4)

将它们存储为标准化表格中建议的消费者。添加索引以检索数据并查看性能。虽然您有多对多关系,但请将其视为总数的百分比。

答案 2 :(得分:1)

我还要指出,将签名表存储在签名者表中将不起作用,因为签名者很可能参与多个交易。

这是一个如此简单,小巧,简单的查询,只要它们被正确编入索引,连接就不太可能出现问题。