|
|
1
4
这在t-SQL中甚至是不可能的(在一个UPDATE语句中同时更新多个表)。 BOL :
和
|
|
|
2
4
而不是
这几乎是效率的3倍,因为它只需要在表中遍历一次。 可能的 即使使用复杂联接,一次也只能更新一个表。比如:
此处仅更改AccountHistory,即使源数据是通过联接访问的。 |
|
|
3
1
我认为6个更新(如果需要,在一个事务中)比1个大的更新更容易理解-因此这是一个更好的解决方案,并且您可以优化每个更新以尽可能快。 JRud评论很好-您可以尝试两种方法并比较时间。 |
|
|
4
1
当查询来自[远程]客户端时 . 在您的情况下,多个查询来自一个存储过程,因此很容易成为本地请求,而将它们组合起来的好处根本不重要。 此外,在检查SQL文档时, 在更新的情况下,不可能编写一个一次修改多个表的查询 ... 最有效的 这样,, 你需要尝试各种可能性 (在一组具有代表性的数据输入下)查看特定变化的影响。由于缺乏关于你具体情况的更多细节,很难提供更有针对性的信息。
一个小而通用的提示:
|
|
|
5
0
对于几乎所有的现代数据库包,还有许多其他技术可供您使用,它们可以在不改变基本表模式的情况下提高性能。您可以根据应用程序使用的查询类型添加自定义索引。在其他技术中,您可以添加索引视图(Oracle中的物化视图)。可以对表进行垂直和/或水平分区。在SQLServe中,您可以“固定”小表,以便它们始终保留在内存中。 |
|
|
6
0
如果我更担心并发性(减少锁定时间)而不是总体性能,我将把键值选择到变量或临时表中。然后,我在更新中使用变量或临时表。“焦点”可以显著提高更新性能。 注意:使用这种方法需要很好地理解系统的工作方式。这种方法的最大风险在于增加死锁的可能性。 |
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
Marc Guillot · 记录值时忽略冲突 1 年前 |
|
|
Fachry Dzaky · 正确使用ROW_NUMBER 1 年前 |
|
|
TriumphTruth · 从满足特定条件的数据集中选择1行 1 年前 |