回答

收藏

在SQL中使用JOIN成本是多少?性能和标准化之间的选择是什么?

技术问答 技术问答 266 人阅读 | 0 人回复 | 2023-09-14

我发现了一个类似的线程,但它并没有真正捕捉到我想内容的本质-因此,我创建了一个新的线程。
+ Q$ s! r9 B8 D" V/ J我知道我们需要权衡标准化和性能之间的选择。我想知道画线的最佳实践是什么?在我的具体情况下,我有一个信息传输系统,它有三个不同的表:messages_threads(总信息持有人),messages_recipients(涉及谁)和messages_messages(实际消息 时间戳记)。: [& L- F5 M# N. j2 _" ~! v' q& N( m7 l
我必须返回收件箱视图messages_threads表,users表和pictures表连接到messages_recipients表,以获取填充视图的信息(配置文件图片、发件人名称、线程ID)。
6 u+ c/ p1 q( f# l..而且我还是给消息添加了一个联系,从最后一条消息中搜索文本,以便向用户展示最后一条消息的预览。
( @4 A3 u, U2 o# z* J% T6 v我的问题是:SQL中的JOINS性能有多贵?例如,我可以存储发件人的名称(必须离开用户才能连接发件人的名称)messages_threads表中名为“, l, ^* O5 C# ~
sendername”的字段下-但在标准化方面,我一直被教导避免数据冗余?' W7 h7 i* m8 A
你在哪里划界线?或者我高估了影响性能的影响SQL连接程度?
# w. V1 D0 Y, s! e; B! x& d: _* O                                                                2 M1 H+ a2 N; i/ e/ x. v
    解决方案:                                                               
. t' l/ @8 T" r5 Y( o& |* S                                                                是最好的方法始终    从3NF一开始,只有在发现特定的性能问题时才。
2 P/ e* m+ u! |9 a% D5 r) z性能只是你必须处理数据库的问题 之一
8 B2 E8 e3 v- `; l/ C6 x- o  c。通过复制数据,你运行,从而不一致的数据在你的数据库的风险,从而抵消的关系数据库,一致性(的核心原则之一C的ACID)一个。/ n0 _+ P# D+ m% z, \2 A
是的,加入需要付出一定的代价,这是不可避免的。然而,成本通常比你想象的要低得多,而且通常会因为其他因素(如网络传输时间)而陷入困境。通过确保正确索引相关列,您可以避免大量此类费用。
! I/ N: J5 O1 \4 Y; Q+ f而且,请记住优化的口头禅: 测量,不要猜测!    并在类似的生产环境中进行测量。保持( u3 S2 [$ d6 z' P( q! W- q
定期测量(和调整)-假如你的架构和数据永远不会改变(极不可能),那么优化只是一套完整的设置,而忘记了操作。- A! w# x7 e, \4 U2 Y! n3 `
a)通常,使用触发器保持一致性可以安全恢复性能。当然,这会减慢你的更新速度,但它仍然可能使你的选择运行得更快。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则