gpt4 book ai didi

sql-server-2005 - 快速、原子表替换

转载 作者:行者123 更新时间:2023-12-02 06:11:49 26 4
gpt4 key购买 nike

我有一个相当简单的命令,我偶尔会运行:

BEGIN TRAN T1;
truncate table mytable
insert into mytable select name from myview
COMMIT TRAN T1;

这个命令有两个不好的副作用:首先,对 mytable 的选择请求经常超时。其次,对 mytable 的 select 请求有时没有返回结果。我不关心它返回的是交易前结果还是交易后结果,但不希望它在中间返回任何东西,或者超时。我想到的一个解决方案几乎肯定会有所帮助,即首先将 View 复制到临时表中(因为 View 有点昂贵)。这不会完全解决问题,但几乎肯定会使窗口变窄到足以忽略问题的程度。坦率地说,窗口很窄,现在可以忽略它,但我不喜欢忽略它。另一种解决方案是疯狂过度工程的一个示例,它是用两个表(例如双缓冲区)替换该表,并调用最新的、正确填充的表。

有没有更优雅的方法来用新表替换表?

最佳答案

没有人应该看到中间的任何东西。如果他们这样做,则意味着您在进行脏读,并且您应得到所有不好的结果。

您可以使用 ALTER TABLE ... SWITCH PARTITION ... 来“切换”另一个表的内容(必须具有相同的结构和约束)。该操作是尽可能快的原子操作,它简单地更改一些元数据指针,以便内容“神奇地”移动到目标表中。参见 Transferring Data Efficiently by Using Partition Switching .源和目标都不需要是显式“分区”表,切换操作也适用于普通的单分区表。

关于sql-server-2005 - 快速、原子表替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1869356/

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