WEB开发网
开发学院数据库MSSQL Server SQL Server性能调教系列(4)--Profiler(下) 阅读

SQL Server性能调教系列(4)--Profiler(下)

 2010-09-27 00:00:00 来源:WEB开发网   
核心提示: 该函数参数为一个查询字符串和要分析的代码的长度,但会输入查询的签名,SQL Server性能调教系列(4)--Profiler(下)(3),并用井号(#)替换所有的参数,测试结果如下:selectdbo.fn_SQLSigTSQL('select*fromSales.SalesOrder

该函数参数为一个查询字符串和要分析的代码的长度,但会输入查询的签名,并用井号(#)替换所有的参数。测试结果如下:

select dbo.fn_SQLSigTSQL('select * from Sales.SalesOrderHeader where SalesOrderID=''43659'' and Status=''5'' ',500)

SQL Server性能调教系列(4)--Profiler(下)

查看原图(大图)

CLR实现

CLR在处理迭代/过程逻辑和字符串处理时比T-SQL效率高,下面介绍用CLR实现模式化查询。

a. 建立C#版的Classs Libary,函数如下:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.SqlServer.Server; 
using System.Data.SqlTypes; 
using System.Text.RegularExpressions; 
 

public partial class SQLSignature 
{ 
  // fn_SQLSigCLR 
  [SqlFunction(IsDeterministic = true, DataAccess = DataAccessKind.None)] 
  public static SqlString fn_SQLSigCLR(SqlString querystring) 
  { 
    return (SqlString)Regex.Replace( 
      querystring.Value, 
      @"([\s,(=<>!](?![^\]]+[\]]))(?:(?:(?:(?#  expression coming 
       )(?:([N])?(')(?:[^']|'')*('))(?#      character 
       )|(?:0x[\da-fA-F]*)(?#           binary 
       )|(?:[-+]?(?:(?:[\d]*\.[\d]*|[\d]+)(?#   precise number 
       )(?:[eE]?[\d]*)))(?#            imprecise number 
       )|(?:[~]?[-+]?(?:[\d]+))(?#        integer 
       ))(?:[\s]?[\+\-\*\/\%\&\|\^][\s]?)?)+(?#  operators 
       ))", 
      @"$1$2$3#$4"); 
  } 
  // fn_RegexReplace - for generic use of RegEx-based replace 
  [SqlFunction(IsDeterministic = true, DataAccess = DataAccessKind.None)] 
  public static SqlString fn_RegexReplace( 
    SqlString input, SqlString pattern, SqlString replacement) 
  { 
    return (SqlString)Regex.Replace( 
      input.Value, pattern.Value, replacement.Value); 
  } 
}

上一页  1 2 3 4 5  下一页

Tags:SQL Server 性能

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接