我知道对于像Postgresql这样的关系型数据库,使用分隔表格会更有效,但我关心的是性能问题,因为执行最多的查询将使用UNION ALL
从多个表中获取行。使用UNION ALL从多个表中获取行或在生产中使用一个表?
我必须选择处理这个问题。第一个是:
table1 -> column1, column2
table2 -> column1, column2
table3 -> column1, column2, column3
在该解决方案我必须使用3种不同的查询合并在生产UNION ALL
和该查询将执行记录在系统(该系统中所执行查询)
另一个是:
table -> column1, column2, typeColumn, extraColumnForTable3
在该溶液我要创建一个额外的列typeColumn
区分行是哪种类型。而且我还必须为类型table3
创建一个列extraColumnForTable3
,对于table2
和table1
类型,它将为NULL。在此解决方案中,执行最多的查询将只包含一条SELECT
声明。
生产中会有数百万行,所以我关心性能。 NULL
值可能会占用数据库中的额外空间,但我认为它可以忽略不计。我将使用消除NULL值的部分索引,所以我不认为这会影响其他提取特定类型的查询。你认为哪一个生产效率更高?
“分隔桌子”?分离是[规范化](http://en.wikipedia.org/wiki/Database_normalization)的结果。如果执行得最多的查询执行该联合,那么很可能您的数据结构不是传统意义上的标准化,而是您只有代表同一事物的专业化的表格,而不是表示泛型和专业化的表格包含对通用中该行的引用。 – Matt 2013-02-13 19:18:50