sql-server – 有没有办法阻止计算列中的标量UDF抑制并行性?
关于SQL Server中的 perils of Scalar UDFs已经写了许多.随意搜刮将返回大量功效. 可是,有些处所标量UDF是独一的选择. 譬喻:处理赏罚XML时:XQuery不能用作计较列界说. Microsoft记录的一个选项是行使Scalar UDF将XQuery封装在Scalar UDF中,然后在计较列中行使它. 这有各类影响和一些办理要领. >查询表时逐行执行 您可以通过架构绑定函数来办理逐行执行题目,并保存计较列或对其举办索引.这些要领都不能阻止逼迫序列化查询到表中,纵然未引用标量UDF也是云云. 有没有一种已知的要领可以做到这一点? 办理要领是的,假如您:>正在运行SQL Server 2014或更高版本;和 详细来说,至少以下版本为are required: > SQL Server 2016 SP1的累积更新2 可是要停止在这些修复中引入的错误(参考2014和2016 and 2017),而是应用: > Cumulative Update 1 for SQL Server 2017 跟踪符号在行使DBCC TRACEON的全局和会话范畴以及行使OPTION(QUERYTRACEON)或打算指南的每个查询中作为启动-T选项有用. 跟踪符号176防备耐久计较列扩展. 编译查询时执行的初始元数据加载会引入全部列,而不只仅是直接引用的列.这使得全部计较列界说都可用于匹配,这凡是是一件功德. 作为一个不幸的副浸染,假如个中一个加载(计较)列行使标量用户界说函数,则其存在会禁用整个查询的并行性,纵然现实未行使计较列也是云云. 假如列是耐久的,则跟踪符号176通过不加载界说(由于跳过扩展)来辅佐办理此题目.这样,标量用户界说的函数永久不会呈此刻编译查询树中,因此不会禁用并行性. 跟踪符号176的首要弱点(除了仅仅是稍微记录)是它还防备查询表达式匹配到耐久计较列:假如查询包括与耐久计较列匹配的表达式,则跟踪符号176将阻止表达式被替代为对计较列的引用. 有关更多具体信息,请参阅我的SQLPerformance.com文章Properly Persisted Computed Columns. 因为题目提到了XML,作为行使计较列和标量函数来晋升值的更换要领,您还可以查察行使选择性XML索引,如您在Selective XML Indexes: Not Bad At All中所述. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |