【问题标题】:Having a read only working table and a writable insertion table then switch which table the select query reads from拥有一个只读工作表和一个可写插入表,然后切换选择查询从哪个表读取
【发布时间】:2019-02-24 03:58:24
【问题描述】:

这里是场景:

TableA - 架构并不重要
TableB - 与 TableA 相同的架构

SYNONYM ROTable FROM TableA  

SYNONYM InsertTable from TableB  

select * from ROTable ... (read only)

Trunc InsertTable   
BULK insert into InsertTable () ... some data  
DROP SYNONYM ROTable   
DROP SYNONYM InsertTable  

SYNONYM ROTable FROM TableB  
SYNONYM InsertTable from TableA  

我什至不知道如何称呼这种技术,但我一直将其称为双缓冲大容量插入。您有 2 个相同的表,您从一个表中读取,同时将记录插入到第二个表中。将记录插入第二个表后,切换到从第二个表读取并截断第一个表并再次开始批量插入。

这将用于当您有大量 UPSERTS 要做时不想在活动表上执行 UPSERTS 的情况。

问题是:这是一种可行的技术,为什么或为什么不可行,它有一个通用名称吗?

【问题讨论】:

  • 有趣的问题 - 这是一个有用且经常使用的模式,但通用模式有名称吗?如果没有,您应该先写一篇博客并将其称为 Michael Horn 技术 :) 这是一篇使用类似模式的文章,但名称又是特定于技术的(分区)sqlsunday.com/2014/08/24/… 它也可以通过 RCSI 有效实现。也许它可以被认为是一种并发模型??

标签: sql sql-server-2008 optimization large-data


【解决方案1】:

是的,这是在 ETL 和报告中交替使用两组表的可行方法。 在 Oracle 中,同样可以使用分区交换来实现。

【讨论】:

  • 它有共同的名字吗?
  • 我不知道,但我称之为“可互换的同义词”
猜你喜欢
  • 1970-01-01
  • 2013-12-14
  • 2013-11-15
  • 1970-01-01
  • 2018-07-27
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多