之前曾有一篇POST是关于用CTE实现Split,这种方法已经比传统的方法高效了。今天我们就这个方法与CLR实现的Split做比较。在CLR实现Split函数的确很简单,dotnet framework本身就有这个function了。 我们新建一个c#-数据库工程,然后建立一个用户自定义函数,Co
之前曾有一篇POST是关于用CTE实现Split,这种方法已经比传统的方法高效了。今天我们就这个方法与CLR实现的Split做比较。在CLR实现Split函数的确很简单,dotnet framework本身就有这个function了。
我们新建一个c#-数据库工程,然后建立一个用户自定义函数,Code像这样:
<span> 1: </span> <span>/// <summary></summary></span>
<span> 2: </span> <span>/// SQLs the array.</span>
<span> 3: </span> <span>/// </span>
<span> 4: </span> <span>/// <param name="str">The STR.</span>
<span> 5: </span> <span>/// <param name="delimiter">The delimiter.</span>
<span> 6: </span> <span>/// <returns></returns></span>
<span> 7: </span> <span>/// 1/8/2010 2:41 PM author: v-pliu</span>
<span> 8: </span> [SqlFunction(Name = <span>"CLR_Split"</span>,
<span> 9: </span> FillRowMethodName = <span>"FillRow"</span>,
<span> 10: </span> TableDefinition = <span>"id nvarchar(10)"</span>)]
<span> 11: </span>
<span> 12: </span> <span>public</span> <span>static</span> IEnumerable SqlArray(SqlString str, SqlChars delimiter)
<span> 13: </span> {
<span> 14: </span> <span>if</span> (delimiter.Length == 0)
<span> 15: </span> <span>return</span> <span>new</span> <span>string</span>[1] { str.Value };
<span> 16: </span> <span>return</span> str.Value.Split(delimiter[0]);
<span> 17: </span> }
<span> 18: </span>
<span> 19: </span> <span>/// <summary></summary></span>
<span> 20: </span> <span>/// Fills the row.</span>
<span> 21: </span> <span>/// </span>
<span> 22: </span> <span>/// <param name="row">The row.</span>
<span> 23: </span> <span>/// <param name="str">The STR.</span>
<span> 24: </span> <span>/// 1/8/2010 2:41 PM author: v-pliu</span>
<span> 25: </span> <span>public</span> <span>static</span> <span>void</span> FillRow(<span>object</span> row, <span>out</span> SqlString str)
<span> 26: </span> {
<span> 27: </span> str = <span>new</span> SqlString((<span>string</span>)row);
<span> 28: </span> }
然后编译,部署一切OK后,在SSMS中执行以下测试T-sql:
<span> 1: </span><span>DECLARE</span> @<span>array</span> <span>VARCHAR</span>(<span>max</span>)
<span> 2: </span><span>SET</span> @<span>array</span> = <span>'39,15,93,68,64,43,90,58,39,9,26,26,89,47,91,57,98,16,55,9,63,29,69,16,41,76,34,60,68,64,61,53,32,30,11,72,57,63,36,43,22,14,60,38,24,5,66,26,26,21,22,99,55,18,7,10,46,76,27,88,9,29,89,75,48,72,94,59,35,19,0,35,79,11,87,49,68,30,91,35,9,7,34,47,41,61,98,13,22,1,26,80,35,48,34,92,24,85,90,51'</span>
<span> 3: </span><span>SELECT</span> id <span>FROM</span> dbo.CLR_Split(@<span>array</span>,<span>','</span>)
我们来看它的Client Statistic:
接着我们执行测试T-sql使用相同的array:
<span> 1: </span><span>DECLARE</span> @<span>array</span> <span>VARCHAR</span>(<span>max</span>)
<span> 2: </span><span>SET</span> @<span>array</span> = <span>'39,15,93,68,64,43,90,58,39,9,26,26,89,47,91,57,98,16,55,9,63,29,69,16,41,76,34,60,68,64,61,53,32,30,11,72,57,63,36,43,22,14,60,38,24,5,66,26,26,21,22,99,55,18,7,10,46,76,27,88,9,29,89,75,48,72,94,59,35,19,0,35,79,11,87,49,68,30,91,35,9,7,34,47,41,61,98,13,22,1,26,80,35,48,34,92,24,85,90,51'</span>
<span> 3: </span><span>SELECT</span> item <span>FROM</span> strToTable(@<span>array</span>,<span>','</span>)
CTE实现的Split function的Client statistic:
通过对比,你可以发现CLR的performance略高于CTE方式,原因在于CLR方式有Cache功能,并且把一个复杂的运算放到程序里比DataBase里更加高效。
您还可以参考:
Split string in SQL Server 2005+ CLR vs. T-SQL
Author:Petter Liu http://wintersun.cnblogs.com/
希望这篇POST对您有帮助。
出现禁止在 .NET Framework 中执行用户代码。启用 "clr enabled" 配置选项错误。
解决方法:查询分析器中运行如下代码即可: exec sp_configure 'show advanced options', '1';go
reconfigure;
go
exec sp_configure 'clr enabled', '1'
go
reconfigure;
exec sp_configure 'show advanced options', '1';
go
即可启用 解释: 备注 clr enabled 选项是一个高级选项。如果使用 sp_configure 系统存储过程来更改该设置,则只有在 show advanced options 设置为 1 时才能更改 clr enabled。该设置在运行 sp_configure 后立即生效。不需要重新启动 SQL Server 实例。
"
配置选项 'show advanced options' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。
配置选项 'clr enabled' 已从 0 更改为 1。请运行 RECONFIGURE 语句进行安装。
配置选项 'show advanced options' 已从 1 更改为 1。请运行 RECONFIGURE 语句进行安装。
"
sp_configure [ [ @configname = ] 'option_name'
[ , [ @configvalue = ] 'value' ] ]
使用 sp_configure 可以显示或更改服务器级别的设置。若要更改数据库级别设置,请使用 ALTER DATABASE。若要更改仅影响当前用户会话的设置,请使用 SET 语句。
更新运行的配置值
为 option 指定新 value 时,结果集的 config_value 列中将显示该值。该值最初与 run_value 列中的值不同,后者显示当前运行的配置值。若要更新 run_value 列中的运行配置值,系统管理员必须运行 RECONFIGURE 或 RECONFIGURE WITH OVERRIDE。
RECONFIGURE 和 RECONFIGURE WITH OVERRIDE 对每个配置选项都有效。但是,基本 RECONFIGURE 语句会拒绝处于合理范围之外或可能导致选项冲突的任何选项值。例如,如果 recovery interval 的值大于 60 分钟,或 affinity mask 的值与 affinity I/O mask 的值重叠,则 RECONFIGURE 会生成错误。与此相反,RECONFIGURE WITH OVERRIDE 则接受具有正确数据类型的任何选项值,并使用指定的值强制进行重新配置。
有些配置选项(例如 affinity mask 和 recovery interval)被指定为高级选项。默认情况下,无法查看和更改这些选项。若要使这些选项可用,请将 Show Advanced Options 配置选项设置为 1。
使用 clr enabled 选项可以指定 Microsoft SQL Server 是否可以运行用户程序集。clr enabled 选项提供下列值。
值 说明
0
不允许在 SQL Server 上执行程序集。
1
允许在 SQL Server 上执行程序集。
注意:
运行 RECONFIGURE 时,clr enabled 选项的运行值将从 1 改为 0,所有包含用户程序集的应用程序域将立即被卸载

电脑性能看如下几个方面:1、电脑安装的操作系统的版本;2、电脑所配置的处理器类型;3、电脑安装的内存大小;4、操作系统是32位的还是64位的。

在Java开发中,字符串查找是一个常见且关键的操作。无论是在文本处理、数据分析还是系统日志分析等应用场景中,字符串的查找性能都对程序的整体性能有着重要影响。因此,如何优化字符串查找性能成为了Java开发中不可忽视的问题。一、使用indexOf()方法代替contains()方法在字符串查找中,Java提供了两个常用的方法:indexOf()和contains

Vue3是一款流行的JavaScript框架,它具有易学易用、高效稳定的特点,尤其擅长构建单页应用程序(SPA)。Vue3中的lazy函数,作为懒加载组件的利器之一,可以很大程度上提高应用程序的性能。本文将详解Vue3中的lazy函数的使用方法与原理,以及它在实际开发中的应用场景和优点。什么是懒加载?在传统的前后端分离的开发中,前端开发人员往往需要处理大量的

如何优化Java开发中的随机数生成性能随机数在计算机科学中有广泛的应用,特别是在密码学、模拟、游戏等领域。在Java开发中,我们常常需要生成随机数来满足各种需求。然而,随机数生成的性能通常是开发者关注的问题之一。本文将探讨如何优化Java开发中的随机数生成性能。使用ThreadLocalRandom类在Java7中引入了ThreadLocalRandom类

String中split方法使用String的split()方法用于按传入的字符或字符串对String进行拆分,返回拆分之后的数组。1、一般用法用一般的字符,例如@或,等符号做分隔符时:Stringaddress="上海@上海市@闵行区@吴中路";String[]splitAddr=address.split("@");System.out.println(splitAddr[0]+splitAddr[1]+splitAddr[2]+splitAddr[3

MySQL是一种常用的关系型数据库管理系统(RDBMS),在各种应用场景下都得到广泛的应用。然而,在高并发、大数据量的情况下,MySQL数据库的性能受到挑战,特别是在读写操作频繁的场景下,容易出现性能瓶颈。为了提高MySQL数据库的性能,可以通过设置MySQL缓存来减少数据库的IO操作,从而提高MySQL的查询效率。在本文中,我们将介绍如何通过设置MySQL

在Go语言中,bytes包是一个用于操作字节类型的包,并且它包含了许多有用的方法,比如Split()方法。不过,在使用Split()方法时,你可能会遇到“undefined:bytes.Split”的错误。这种错误通常是由于Go版本不兼容或缺少必要的依赖库等原因引起的。这篇文章将介绍一些解决这种错误的方法。方法一:升级Go版本如

在Python中,split() 是一个常用的字符串方法,用于将字符串分割成子字符串,并返回一个包含这些子字符串的列表。该方法可以根据指定的分隔符将字符串拆分成多个部分。其基本语法是“str.split(separator, maxsplit)”,str是要分割的字符串,separator是分隔符,maxsplit是可选参数,表示最大分割次数。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

드림위버 CS6
시각적 웹 개발 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
