示例:我们有列id
、A1
、A2
、A3
、B1
、B2
、B3
列。A
列通常一起查询,B
列也是如此,但A
通常不会与B
同时查询。
(1( 将所有列存储在一个表中,与 (2( 拆分一个表用于A
列和一个表用于B
列(这需要复制id
列(相比,性能是否会受到影响?
我正在使用Postgres。
1(是:一个表中的所有列使读取每一行的成本更高,因为每页的行数更少,因此需要读取更多的页面 - 更多的I/O。
2( 是:当您确实需要 As 和 B 时,两个单独的表速度较慢,因为您需要将它们连接在一起。 这通常具有更多的 I/O。
一般来说,你会用一个换另一个。 如果您总是要消费或使用一个小的、索引良好的集合,那可能无关紧要。 如果您要拖网大量行,无论是因为没有有用的索引还是大输出,那么您最好使用特定方案来衡量它,而不是猜测甚至应用经验法则。