删除并重新创建表(锁定)

时间:2017-07-07 02:37:07

标签: sql sql-server

我需要将大量数据更新到我用于缓存的SQL Server表中,这种情况大约每10分钟发生一次。

我发现不是使用"插入... tableName"删除表并使用" Select * INTO ... tableName"重新创建它。快得多。

我的问题是如何锁定表格,即阻止用户在丢弃或选择时查询表格?

如果我将它包装在事务中,这有用吗?

其他 只是进一步说明这一点,因为我可能还不够开始。

我最初使用的是TRUNCATE然后INSERT INTO,但这需要大约8-10秒。哪个可能会吸引用户。

所以我想做的就是放弃桌子然后用SELECT INTO重新调整表格,这非常快。但是,我想我的问题是如果有人在DROP之后和SELECT INTO之前查询表会发生什么?在这种情况下会发生什么?

1 个答案:

答案 0 :(得分:1)

您可以选择将数据加载到具有临时名称的表中,然后快速DROP您的主表,RENAME另一个。include()

这些是非常快的操作(原子?),不可用性应该是最小的。

https://dev.mysql.com/doc/refman/5.7/en/rename-table.html

https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-table-transact-sql

您需要做的就是,在此过程中需要阅读数据库的极少数用户向他们展示一个"请等待消息"或类似的,以便用户体验保持平稳(使用标记来跟踪进程何时开始/结束)。