这样可能导致查询语句非常复杂,此时的效率也比较低.
TFS查询条件界面:
如果可以获取查询语句的成本,当sql语句执行成本很大(可能执行时间会很长时),系统自动提示用户是否继续或则大概需要多长时间,这样会提高用户体验.
下举一例:
查询sql Server中的所有列信息表:sys.all_columns
在sql server 2k8 management studio 中先后执行下面每行语句即可得到sql语句的成本,即为第二个语句执行结果中第一行中TotalSubtreeCost字段值.
set showplan_all on
select * from sys.all_columns
第二个语句(select * from sys.all_columns)执行结果:
再执行 set showplan_all off结束查询计划分析结果.
此时可以应用showplan_all来获取SQL查询的成本.
如下为C#简单实现上述应用,在VS2k8中编译通过,只需正确更改Data Source即可运行:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.sqlClient;
using System.Data;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
sqlConnectionStringBuilder connectionBuilder = new sqlConnectionStringBuilder();
connectionBuilder.Add(Data Source,your server name or ip);
connectionBuilder.Add(Initial Catalog,master);
connectionBuilder.Add(Integrated Security,True);
string sqlStr = select * from sys.all_columns;
Console.WriteLine(GetsqlCost(connectionBuilder.ToString(),sqlStr).ToString());
Console.Read();
}
static double GetsqlCost(string connectStr,string strsql)
{
double sqlCost;
int timeOut;
sqlDataAdapter adapter;
sqlConnection connection = new sqlConnection(connectStr);
sqlCommand command;
DataTable table;
timeOut = 180;
adapter = null;
try
{
connection.open();
command = new sqlCommand(set showplan_all on ,connection);
command.ExecuteNonQuery();
command.CommandText = strsql;
adapter = new sqlDataAdapter(strsql,connection);
adapter.SelectCommand.CommandTimeout = timeOut;
table = new DataTable();
adapter.Fill(table);
command.CommandText = set showplan_all off;
command.ExecuteNonQuery();
sqlCost = System.Convert.Todouble(table.Rows[0][TotalSubtreeCost]);
}
finally
{
command = null;
connection.Close();
}
return sqlCost;
}
}
}
转自:http://www.cnblogs.com/zzj8704/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。