Maison base de données tutoriel mysql SQLSERVER2008中CTE的Split与CLR的性能比较 <转>

SQLSERVER2008中CTE的Split与CLR的性能比较 <转>

Jun 07, 2016 pm 03:40 PM
split 性能

之前曾有一篇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>
Copier après la connexion
<span>   2:  </span>    <span>/// SQLs the array.</span>
Copier après la connexion
<span>   3:  </span>    <span>/// </span>
Copier après la connexion
<span>   4:  </span>    <span>/// <param name="str">The STR.</span>
Copier après la connexion
<span>   5:  </span>    <span>/// <param name="delimiter">The delimiter.</span>
Copier après la connexion
<span>   6:  </span>    <span>/// <returns></returns></span>
Copier après la connexion
<span>   7:  </span>    <span>/// 1/8/2010  2:41 PM   author: v-pliu</span>
Copier après la connexion
<span>   8:  </span>    [SqlFunction(Name = <span>"CLR_Split"</span>,
Copier après la connexion
<span>   9:  </span>    FillRowMethodName = <span>"FillRow"</span>,
Copier après la connexion
<span>  10:  </span>    TableDefinition = <span>"id nvarchar(10)"</span>)]
Copier après la connexion
<span>  11:  </span> 
Copier après la connexion
<span>  12:  </span>    <span>public</span> <span>static</span> IEnumerable SqlArray(SqlString str, SqlChars delimiter)
Copier après la connexion
<span>  13:  </span>    {
Copier après la connexion
<span>  14:  </span>        <span>if</span> (delimiter.Length == 0)
Copier après la connexion
<span>  15:  </span>            <span>return</span> <span>new</span> <span>string</span>[1] { str.Value };
Copier après la connexion
<span>  16:  </span>        <span>return</span> str.Value.Split(delimiter[0]);
Copier après la connexion
<span>  17:  </span>    }
Copier après la connexion
<span>  18:  </span> 
Copier après la connexion
<span>  19:  </span>    <span>/// <summary></summary></span>
Copier après la connexion
<span>  20:  </span>    <span>/// Fills the row.</span>
Copier après la connexion
<span>  21:  </span>    <span>/// </span>
Copier après la connexion
<span>  22:  </span>    <span>/// <param name="row">The row.</span>
Copier après la connexion
<span>  23:  </span>    <span>/// <param name="str">The STR.</span>
Copier après la connexion
<span>  24:  </span>    <span>/// 1/8/2010  2:41 PM   author: v-pliu</span>
Copier après la connexion
<span>  25:  </span>    <span>public</span> <span>static</span> <span>void</span> FillRow(<span>object</span> row, <span>out</span> SqlString str)
Copier après la connexion
<span>  26:  </span>    {
Copier après la connexion
<span>  27:  </span>        str = <span>new</span> SqlString((<span>string</span>)row);
Copier après la connexion
<span>  28:  </span>    }
Copier après la connexion


然后编译,部署一切OK后,在SSMS中执行以下测试T-sql:

<span>   1:  </span><span>DECLARE</span> @<span>array</span> <span>VARCHAR</span>(<span>max</span>)
Copier après la connexion
Copier après la connexion
<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>
Copier après la connexion
Copier après la connexion
<span>   3:  </span><span>SELECT</span> id <span>FROM</span> dbo.CLR_Split(@<span>array</span>,<span>','</span>)
Copier après la connexion

 

我们来看它的Client Statistic:

SQLSERVER2008中CTE的Split与CLR的性能比较 <转>

接着我们执行测试T-sql使用相同的array:

<span>   1:  </span><span>DECLARE</span> @<span>array</span> <span>VARCHAR</span>(<span>max</span>)
Copier après la connexion
Copier après la connexion
<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>
Copier après la connexion
Copier après la connexion
<span>   3:  </span><span>SELECT</span> item <span>FROM</span> strToTable(@<span>array</span>,<span>','</span>)
Copier après la connexion

 

CTE实现的Split function的Client statistic:

SQLSERVER2008中CTE的Split与CLR的性能比较 <转>

通过对比,你可以发现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';
SQLSERVER2008中CTE的Split与CLR的性能比较 <转>
go
SQLSERVER2008中CTE的Split与CLR的性能比较 <转>
reconfigure;
SQLSERVER2008中CTE的Split与CLR的性能比较 <转>
go
SQLSERVER2008中CTE的Split与CLR的性能比较 <转>
exec sp_configure 'clr enabled', '1'
SQLSERVER2008中CTE的Split与CLR的性能比较 <转>
go
SQLSERVER2008中CTE的Split与CLR的性能比较 <转>
reconfigure;
SQLSERVER2008中CTE的Split与CLR的性能比较 <转>
exec sp_configure 'show advanced options', '1';
SQLSERVER2008中CTE的Split与CLR的性能比较 <转>
go

 

即可启用
"
配置选项 '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 上执行程序集。
 

clr enabled 选项是一个高级选项。如果使用 sp_configure 系统存储过程来更改该设置,则只有在 show advanced options 设置为 1 时才能更改 clr enabled。该设置在运行 sp_configure 后立即生效。不需要重新启动 SQL Server 实例。
注意:
运行 RECONFIGURE 时,clr enabled 选项的运行值将从 1 改为 0,所有包含用户程序集的应用程序域将立即被卸载

 

http://www.cnblogs.com/wintersun/archive/2010/01/08/1642265.html
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La différence entre vivox100s et x100 : comparaison des performances et analyse des fonctions La différence entre vivox100s et x100 : comparaison des performances et analyse des fonctions Mar 23, 2024 pm 10:27 PM

Les téléphones mobiles vivox100 et x100 sont des modèles représentatifs de la gamme de produits de téléphonie mobile de Vivo. Ils représentent respectivement les niveaux de technologie haut de gamme de Vivo à différentes périodes. Par conséquent, ces deux téléphones mobiles présentent certaines différences en termes de conception, de performances et de fonctions. Cet article procédera à une comparaison détaillée entre ces deux téléphones mobiles en termes de comparaison des performances et d'analyse des fonctions pour aider les consommateurs à mieux choisir le téléphone mobile qui leur convient. Tout d’abord, examinons la comparaison des performances entre les vivox100 et x100. vivox100s est équipé des dernières

Comment afficher les superpositions de performances cachées dans Windows 11 Comment afficher les superpositions de performances cachées dans Windows 11 Mar 24, 2024 am 09:40 AM

Dans ce didacticiel, nous vous aiderons à révéler les superpositions de performances cachées dans Windows 11. Grâce à la fonctionnalité Performance Overlay de Windows 11, vous pourrez surveiller les ressources de votre système en temps réel. Vous pouvez afficher en temps réel l'utilisation du processeur, l'utilisation du disque, l'utilisation du GPU, l'utilisation de la RAM, etc. sur l'écran de votre ordinateur. Ceci est pratique lorsque vous jouez à des jeux ou utilisez de gros programmes graphiques (tels que des éditeurs vidéo) et que vous devez vérifier dans quelle mesure les performances du système sont affectées lors de l'utilisation d'un programme spécifique. Bien qu'il existe d'excellents logiciels gratuits disponibles pour surveiller les performances du système et que certains outils intégrés tels que Resource Monitor puissent être utilisés pour vérifier les performances du système, la fonction de superposition des performances présente également des avantages. Par exemple, vous n'avez pas besoin de quitter le programme ou l'application que vous utilisez actuellement ou

Comparaison des performances de Windows 10 et Windows 11 : lequel est le meilleur ? Comparaison des performances de Windows 10 et Windows 11 : lequel est le meilleur ? Mar 28, 2024 am 09:00 AM

Comparaison des performances de Windows 10 et Windows 11 : lequel est le meilleur ? Avec le développement et les progrès continus de la technologie, les systèmes d’exploitation sont constamment mis à jour et mis à niveau. En tant que l'un des plus grands développeurs de systèmes d'exploitation au monde, la série de systèmes d'exploitation Windows de Microsoft a toujours attiré beaucoup d'attention de la part des utilisateurs. En 2021, Microsoft a lancé le système d’exploitation Windows 11, ce qui a suscité de nombreuses discussions et attentions. Alors, quelle est la différence de performances entre Windows 10 et Windows 11 ?

En comparant les performances des systèmes Win11 et Win10, lequel est le meilleur ? En comparant les performances des systèmes Win11 et Win10, lequel est le meilleur ? Mar 27, 2024 pm 05:09 PM

Le système d'exploitation Windows a toujours été l'un des systèmes d'exploitation les plus utilisés sur les ordinateurs personnels, et Windows 10 a longtemps été le système d'exploitation phare de Microsoft jusqu'à récemment, lorsque Microsoft a lancé le nouveau système Windows 11. Avec le lancement du système Windows 11, les gens se sont intéressés aux différences de performances entre les systèmes Windows 10 et Windows 11. Lequel est le meilleur entre les deux ? Jetons d’abord un coup d’œil à W

Le processeur Kirin 8000 rivalise avec la série Snapdragon : qui peut être roi ? Le processeur Kirin 8000 rivalise avec la série Snapdragon : qui peut être roi ? Mar 25, 2024 am 09:03 AM

À l’ère de l’Internet mobile, les smartphones sont devenus un élément indispensable de la vie quotidienne des gens. Les performances des smartphones déterminent souvent directement la qualité de l’expérience utilisateur. En tant que « cerveau » d’un smartphone, les performances du processeur sont particulièrement importantes. Sur le marché, la série Qualcomm Snapdragon a toujours été représentative de performances, de stabilité et de fiabilité élevées, et récemment Huawei a également lancé son propre processeur Kirin 8000, qui aurait d'excellentes performances. Pour les utilisateurs ordinaires, comment choisir un téléphone mobile doté de performances élevées est devenu une question clé. Aujourd'hui, nous allons

Les performances d'exécution locale du service Embedding dépassent celles d'OpenAI Text-Embedding-Ada-002, ce qui est très pratique ! Les performances d'exécution locale du service Embedding dépassent celles d'OpenAI Text-Embedding-Ada-002, ce qui est très pratique ! Apr 15, 2024 am 09:01 AM

Ollama est un outil super pratique qui vous permet d'exécuter facilement des modèles open source tels que Llama2, Mistral et Gemma localement. Dans cet article, je vais vous présenter comment utiliser Ollama pour vectoriser du texte. Si vous n'avez pas installé Ollama localement, vous pouvez lire cet article. Dans cet article, nous utiliserons le modèle nomic-embed-text[2]. Il s'agit d'un encodeur de texte qui surpasse OpenAI text-embedding-ada-002 et text-embedding-3-small sur les tâches à contexte court et à contexte long. Démarrez le service nomic-embed-text lorsque vous avez installé avec succès o

Comparaison des performances de différents frameworks Java Comparaison des performances de différents frameworks Java Jun 05, 2024 pm 07:14 PM

Comparaison des performances de différents frameworks Java : Traitement des requêtes API REST : Vert.x est le meilleur, avec un taux de requêtes de 2 fois SpringBoot et 3 fois Dropwizard. Requête de base de données : HibernateORM de SpringBoot est meilleur que l'ORM de Vert.x et Dropwizard. Opérations de mise en cache : le client Hazelcast de Vert.x est supérieur aux mécanismes de mise en cache de SpringBoot et Dropwizard. Cadre approprié : choisissez en fonction des exigences de l'application. Vert.x convient aux services Web hautes performances, SpringBoot convient aux applications gourmandes en données et Dropwizard convient à l'architecture de microservices.

Comparaison des langages PHP et Go : grosse différence de performances Comparaison des langages PHP et Go : grosse différence de performances Mar 26, 2024 am 10:48 AM

PHP et Go sont deux langages de programmation couramment utilisés et présentent des caractéristiques et des avantages différents. Parmi eux, la différence de performances est un problème qui préoccupe généralement tout le monde. Cet article comparera les langages PHP et Go du point de vue des performances et démontrera leurs différences de performances à travers des exemples de code spécifiques. Tout d’abord, présentons brièvement les fonctionnalités de base du langage PHP et Go. PHP est un langage de script initialement conçu pour le développement Web. Il est facile à apprendre et à utiliser et est largement utilisé dans le domaine du développement Web. Le langage Go est un langage compilé développé par Google.

See all articles