SQLSERVER2008中CTE的Split与CLR的性能比较 <转>
之前曾有一篇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,所有包含用户程序集的应用程序域将立即被卸载

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











vivox100s と x100 携帯電話はどちらも vivo の携帯電話製品ラインの代表的なモデルであり、それぞれ異なる時代における vivo のハイエンド技術レベルを代表するものであるため、2 つの携帯電話にはデザイン、性能、機能に一定の違いがあります。この記事では、消費者が自分に合った携帯電話をより適切に選択できるように、これら 2 つの携帯電話を性能比較と機能分析の観点から詳しく比較します。まずはvivox100sとx100の性能比較を見てみましょう。 vivox100s には最新の機能が搭載されています。

このチュートリアルでは、Windows 11 の隠れたパフォーマンス オーバーレイを明らかにするのに役立ちます。 Windows 11 のパフォーマンス オーバーレイ機能を使用すると、システム リソースをリアルタイムで監視できます。コンピューター画面上でリアルタイムの CPU 使用率、ディスク使用率、GPU 使用率、RAM 使用率などを表示できます。これは、ゲームをプレイしているときや大規模なグラフィック プログラム (ビデオ エディターなど) を使用しているときに、特定のプログラムの使用時にシステム パフォーマンスがどの程度影響を受けるかを確認する必要がある場合に便利です。システム パフォーマンスを監視するための優れた無料ソフトウェアがいくつかあり、リソース モニターなどの組み込みツールを使用してシステム パフォーマンスをチェックできますが、パフォーマンス オーバーレイ機能にも利点があります。たとえば、現在使用しているプログラムやアプリを終了する必要はありません。

Windows 10 と Windows 11 のパフォーマンス比較: どちらが優れていますか?テクノロジーの継続的な開発と進歩により、オペレーティング システムは常に更新され、アップグレードされます。世界最大のオペレーティング システム開発者の 1 つとして、Microsoft の Windows シリーズ オペレーティング システムは常にユーザーから大きな注目を集めてきました。 2021 年、Microsoft は Windows 11 オペレーティング システムをリリースし、広範な議論と注目を引き起こしました。では、Windows 10 と Windows 11 のパフォーマンスの違いは何でしょうか?

PHP と Go は一般的に使用される 2 つのプログラミング言語であり、それぞれに異なる特徴と利点があります。その中でも性能差は誰もが一般的に気にする問題です。この記事では、パフォーマンスの観点から PHP 言語と Go 言語を比較し、具体的なコード例を通じてパフォーマンスの違いを示します。まずは、PHPとGo言語の基本的な機能を簡単に紹介します。 PHP は、もともと Web 開発用に設計されたスクリプト言語で、学習と使用が簡単で、Web 開発の分野で広く使用されています。 Go 言語は、Google によって開発されたコンパイル言語です。

Ollama は、Llama2、Mistral、Gemma などのオープンソース モデルをローカルで簡単に実行できるようにする非常に実用的なツールです。この記事では、Ollamaを使ってテキストをベクトル化する方法を紹介します。 Ollama をローカルにインストールしていない場合は、この記事を読んでください。この記事では、nomic-embed-text[2] モデルを使用します。これは、短いコンテキストおよび長いコンテキストのタスクにおいて OpenAI text-embedding-ada-002 および text-embedding-3-small よりも優れたパフォーマンスを発揮するテキスト エンコーダーです。 o が正常にインストールされたら、nomic-embed-text サービスを開始します。

Windows オペレーティング システムは、常にパーソナル コンピューターで最も広く使用されているオペレーティング システムの 1 つであり、最近 Microsoft が新しい Windows 11 システムを発売するまで、Windows 10 は長い間 Microsoft の主力オペレーティング システムでした。 Windows 11 システムのリリースに伴い、Windows 10 と Windows 11 システムのパフォーマンスの違いに関心が集まっていますが、どちらの方が優れているのでしょうか?まずはWを見てみましょう

PHP の配列キー値の反転メソッドのパフォーマンスを比較すると、array_flip() 関数は、大規模な配列 (100 万要素以上) では for ループよりもパフォーマンスが良く、所要時間が短いことがわかります。キー値を手動で反転する for ループ方式は、比較的長い時間がかかります。

さまざまな Java フレームワークのパフォーマンス比較: REST API リクエスト処理: Vert.x が最高で、リクエスト レートは SpringBoot の 2 倍、Dropwizard の 3 倍です。データベース クエリ: SpringBoot の HibernateORM は Vert.x や Dropwizard の ORM よりも優れています。キャッシュ操作: Vert.x の Hazelcast クライアントは、SpringBoot や Dropwizard のキャッシュ メカニズムよりも優れています。適切なフレームワーク: アプリケーションの要件に応じて選択します。Vert.x は高パフォーマンスの Web サービスに適しており、SpringBoot はデータ集約型のアプリケーションに適しており、Dropwizard はマイクロサービス アーキテクチャに適しています。
