sql-server – 如何在SQL Server 2017中使用SNAPSHOT_MATERIALIZ
|
SQL Server 2017有几个新的存储过程: > sp_refresh_single_snapshot_view – @ view_name nvarchar(261)的输入参数,@ rgCode int sys.messages中的新条目: > 10149 – 无法在视图’%.* ls’上创建具有SNAPSHOT_MATERIALIZATION的索引,因为视图定义包含内存优化表. 和新的扩展事件: 那么我们如何创建快照实体化视图呢? (显然,微软还没有记录它.)这是一个没有用的gist with things I’ve tried so far. 解决方法你不能.该功能在2017 RTM中被禁用.那说,你可以…… 使用AdventureWorks: CREATE VIEW dbo.TH
WITH SCHEMABINDING
AS
SELECT P.ProductID,COUNT_BIG(*) AS cbs
FROM Production.Product AS P
JOIN Production.TransactionHistory AS TH
ON TH.ProductID = P.ProductID
GROUP BY P.ProductID;
GO
CREATE UNIQUE CLUSTERED INDEX cuq ON dbo.TH (ProductID)
WITH (SNAPSHOT_MATERIALIZATION = ON);
对基础表的更改不会立即反映在视图中(通常是SQL Server的情况).同样,针对基础表的数据修改不必维护快照索引视图. 要刷新视图内容,需要调用其中一个新的存储过程: EXECUTE sys.sp_refresh_single_snapshot_view
@view_name = N'dbo.TH',@rgCode = 0; -- don't know what this is for yet
这会产生执行计划: 这可能对您不起作用,因为需要一个未记录的跟踪标志,或者您需要做我特别讨厌的事情:写入保存功能标志的内存位置(使用调试器)来启用此功能. 如果你很好奇,那么feature标志就是sqllang的字节!g_featureSwitchesLangSvc 0x10f.在sqllang!SpRefreshSingleSnapshotView期间检查它. 如果您想要一起玩,并且已经做好充分的准备,可以接受SQL Server代码运行时黑客攻击的后果,并使用Microsoft认为尚未准备好的功能: >将调试器附加到SQL Server 2017进程.我使用的是WinDbg. bp sqllang!SpRefreshSingleSnapshotView >使用Go命令恢复SQL Server(g) cmp byte ptr [sqllang!g_featureSwitchesLangSvc+0x10f (00007fff`328dfbcf)],0 其他构建中的偏移量可能不同,例如在2017 RTM CU3中它是sqllang!g_featureSwitchesLangSvc 0x114 db 00007fff`328dfbcf L1 >此值应显示为零,表示该功能已禁用. eb 00007fff`328dfbcf 1 >禁用断点并继续运行SQL Server. 注意SNAPSHOT_MATERIALIZATION允许我们实现通常无法编制索引的查询规范的快照,例如,下面使用MAX: CREATE VIEW dbo.TH2 WITH SCHEMABINDING AS SELECT TH.ProductID,MaxTransactionID = MAX(TH.TransactionID) FROM Production.TransactionHistory AS TH GROUP BY TH.ProductID; GO CREATE UNIQUE CLUSTERED INDEX cuq ON dbo.TH2 (ProductID) WITH (SNAPSHOT_MATERIALIZATION = ON); 结果: Commands completed successfully. (编辑:黄山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql – 如何组合来自两个存储过程调用的结果集?
- sql-server – 如何将SQL Server死锁报告中的密钥转换为值?
- 分析SQL Server删除重复行的6个方法
- sql-server – SQL Server中是否存在“包含文件”的概念?
- sql-server – 在IF EXISTS中包装查询使得它非常慢
- sql-server – 收缩Sql Server数据库
- sql-server – 帮助安装SQL Server 2017 – VS Shell安装失
- sql-server – Transact-SQL查询中字符串前的N前缀
- 高版本sql数据库备份还原低版本怎样实现?
- SqlServer表连接怎么运用?四种连接实例详解
