1
SQL Server-处理嵌套的非确定性视图堆栈中的字符串本地化
在对数据库进行概要分析时,我遇到了一个视图,该视图引用了一些不确定性函数,对于该应用程序池中的每个连接,每分钟可访问1000-2500次。从视图中看,一个简单的代码将产生以下执行计划:SELECT 对于少于一千行的视图来说,这似乎是一个复杂的计划,每隔几个月可能会看到一两行发生变化。但是随着以下其他情况的恶化,情况变得更糟: 嵌套视图是不确定的,因此我们无法为其编制索引 每个视图都引用多个UDFs来构建字符串 每个UDF都包含嵌套UDF的,以获取本地化语言的ISO代码 堆栈中的视图使用从s 返回的其他字符串构建器UDF作为JOIN谓词 每个视图堆被视为一个表,这意味着有INSERT/ UPDATE/ DELETE在每个触发器来写入底层表 在视图上,这些触发器使用CURSORS该EXEC存储过程作为参考更多的这些串建设UDF秒。 这对我来说似乎很烂,但是我只有几年使用TSQL的经验。它也会变得更好! 看来开发人员认为这是个好主意,做了所有这些工作,以便所存储的几百个字符串可以基于从UDF特定于模式的a返回的字符串进行翻译。 这是堆栈中的视图之一,但是它们都同样糟糕: CREATE VIEW [UserWKStringI18N] AS SELECT b.WKType, b.WKIndex , CASE WHEN ISNULL(il.I18NID, N'') = N'' THEN id.I18NString ELSE il.I18nString END AS WKString ,CASE WHEN ISNULL(il.I18NID, N'') = N'' THEN id.IETFLangCode ELSE il.IETFLangCode END AS IETFLangCode ,dbo.User3StringI18N_KeyValue(b.WKType, b.WKIndex, …