首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >同时在SELECT和WHERE中使用C# CLR

同时在SELECT和WHERE中使用C# CLR
EN

Stack Overflow用户
提问于 2022-08-20 16:42:55
回答 4查看 63关注 0票数 0

我有一个C# CLR执行多个字符串操作。它返回一个int。我用的是

代码语言:javascript
运行
复制
SELECT func(col1, col2) AS Score
INTO #A
FROM table;

SELECT *
INTO #B
FROM #A
WHERE Score > -1

如果我做了这样的事

代码语言:javascript
运行
复制
SELECT func(col1, col2) AS Score
INTO #A
FROM table
WHERE func(col1, col2) > -1;

是否有两次调用和执行CLR?就性能/速度而言,是否有更好的方法来获得同样的结果?

col1是nvarchar(max),col2是nvarchar(800)。该函数包含业务逻辑。

大约有100亿行/计算

EN

Stack Overflow用户

发布于 2022-08-24 17:00:15

如果您可以合理地将IsDeterministic和IsPrecise属性放在函数上(非常肯定IsDeterministic,非常肯定IsPrecise';我现在无法找到有关需求的文档),那么您可以向表中添加定义为func(col1, col2)的计算列并对其进行索引。它将使函数在查询时不被调用,而是在插入/更新行时调用。我的建议是尝试在运行之前添加计算列并将其索引到表的一个小版本上。这就是:

  • select top(100) * into dbo.TestTable from dbo.YourTable;
  • alter table dbo.TestTable add NewColumn as dbo.func(col1, col2);
  • create index FuncIndex on dbo.TestTable (NewColumn);

和/或,如果您有一个非生产环境,做它的活桌子在那里。

如果对该列上可能查询的谓词进行筛选是有意义的,则可以对索引进行筛选。但这是一个普遍的索引问题,而不是特定于您的情况。

票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73428476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档