【发布时间】:2013-08-07 03:53:49
【问题描述】:
我对两种设计的性能有疑问。目标是存储多种类型的实体,它们共享一些属性但也不同。
方法 1:多个表,每个表建模一个实体
Entity1 - C1, C2, C3
Entity2 - C1, C2, C4
Entity3 - C1, C2, C5
要查询,我需要对所有表执行UNION ALL。
方法 2:包含所有列和类型列的单个表
All - Type, C1, C2, C3, C4, C5
这里,我可以直接在列上查询。
问题是UNION ALL 方法是否存在性能问题?这个问题和 PostsgreSQL 上的previously asked question 类似,没有回答。
编辑:
感谢您的所有回答。
实体表是日期索引的。并且查询大部分是过滤的时间日期或过滤的共享字段。假设 C1 是日期,C2 是字符串,95% 的查询看起来像 C1>=from 和 C1
记录数量增长缓慢,每个实体每天可能有几百条记录。列数不会超过 150。但是,共享列的数量很少。目前我已经实现了方法 1,因为每个实体都可以使用共享以外的字段作为主键。这样约束更自然。
【问题讨论】:
-
您可能需要考虑 eva 模式。 en.wikipedia.org/wiki/…
-
根据我的经验,Union 查询比较慢,所以一般来说单表应该比较快。你打算做很多类型特定的过程吗?他们实际共享了多少数据?如果把它们放在一起,会不会有尺寸问题?
-
@Declan_K,EAV 模式是最糟糕的。除非您绝对无法事先定义您需要哪些文件,否则应避免使用它们。这两种方法都应该比 EAv 方法执行得更好,并且更容易查询。
标签: sql sql-server tsql