PostgreSQL 使用技巧:“连接操作是免费的”这种说法并不正确,但它确实很有用。尽量避免反规范化,只有在用户痛点出现时才必须这样做。开发人员会试图让你反规范化,因为“这样速度更快”,但除非真正的用户抱怨,否则一定要拒绝他们。
开发者们热衷于反规范化和连接(JOIN)的另一个原因是查询复杂度。他们希望编写更简洁、更易读的查询,避免使用大量的连接。而解决这个问题的答案总是“精通SQL”之类的说法。我们会一直使用连接,直到我们完全无法再进行连接为止。
“直接用连接就行了”是@lisamahapatra 经常拿来取笑我的“Jon式口头禅”之一,因为每次讨论数据模型的时候我都会说这句话。大家都知道我会这么说……事实上,我觉得他们是故意想引诱我说这句话。
@lisamahapatra 我发起这个讨论的灵感来源于我目前正在进行反规范化以提高速度。相关表现在足够大,而且数据模型也足够稳定,不再处于变化状态,因此进行一些策略性的反规范化可以带来显著的性能提升,并且可以通过 EXPLAIN ANALYZEa 进行验证。
@lisamahapatra 是的,如果数据模型稳定,视图就非常棒,而且这确实只是一个体验问题,而不是性能问题。当模型稳定下来,我们不再需要在代码中编写连接操作的灵活性时,要么使用反规范化(为了性能),要么使用视图(为了体验)。