gpt4 book ai didi

sql-server-2005 - 如何对高度规范化的数据库系统进行非规范化?

转载 作者:行者123 更新时间:2023-12-01 07:23:00 24 4
gpt4 key购买 nike

我希望向高度规范化的系统引入一些数据库非规范化。

我有大量的数据库,这些数据库已经发展了十多年,并且负载量越来越大,因此我希望提高性能并可能降低某些查询的复杂性。

在存储过程中执行 10 个连接以完成任何给定任务的情况并不少见。有人告诉我,超过 6 种臭味。

我应该保持表结构不变并提供一些物化 View 或非规范化的“缓存”表。

一些关于最佳实践的建议或朝着正确方向努力会有所帮助。

谢谢

最佳答案

你不说问题是什么。是性能吗?如果是这样,在什么 table 上?

真的是连接导致了问题吗?还是存储过程?你不知道(或者至少,你没有说)。

最佳实践:首先找出瓶颈所在,然后再尝试解决尚未诊断的问题。

关于编辑:我想起了我们在工作中遇到性能问题的时候。非常慢的存储过程,可能需要几分钟才能完成。事实证明,这些 sps 正在执行完全正常的表更新,但使用的是游标。对于像 update t set c = c + 1 where id = n 这样简单的东西.

因此,为了进行更新,我们使用昂贵的更新游标在一堆行中进行游标并执行 declare cursor for "select c from t where id = n" for update;然后是一个打开的游标和一个读取和一个错误检查以及一个带有读取和错误检查的循环,然后是 select c into @c; @c = c + 1; update t set c = @c where current of cursor;每一次更新。

原来写这篇文章的人没有意识到我们可以发布更新声明。所以他写了几十个这样的慢速存储过程。我们甚至不需要摆脱存储的过程(虽然这也会提高我们的速度,但它会改变我们的客户端);我们刚刚摆脱了游标,用更新语句替换了它们。性能问题消失了。

关于sql-server-2005 - 如何对高度规范化的数据库系统进行非规范化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/793575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com