西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)西西教程數(shù)據(jù)庫(kù)教程 → SqlServer怎樣獲取查詢語(yǔ)句的成本

SqlServer怎樣獲取查詢語(yǔ)句的成本

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:zzj8704時(shí)間:2010/3/16 17:18:46字體大小:A-A+

作者:佚名點(diǎn)擊:300次評(píng)論:1次標(biāo)簽: SqlServer

  • 類型:數(shù)據(jù)庫(kù)類大。594KB語(yǔ)言:中文 評(píng)分:7.7
  • 標(biāo)簽:
立即下載

在有些大系統(tǒng)中,客戶端查詢非常復(fù)雜,需要顯示很多字段和過(guò)濾很多條件,例如TFS中的條件過(guò)濾,或則用戶希望客戶端查詢能像EXCEL過(guò)濾那樣方便

這樣可能導(dǎo)致查詢語(yǔ)句非常復(fù)雜,此時(shí)的效率也比較低.

 

TFS查詢條件界面:

 

 

如果可以獲取查詢語(yǔ)句的成本,當(dāng)SQL語(yǔ)句執(zhí)行成本很大(可能執(zhí)行時(shí)間會(huì)很長(zhǎng)時(shí)),系統(tǒng)自動(dòng)提示用戶是否繼續(xù)或則大概需要多長(zhǎng)時(shí)間,這樣會(huì)提高用戶體驗(yàn).

 

下舉一例:

查詢Sql Server中的所有列信息表:sys.all_columns

在Sql server 2k8 management studio 中先后執(zhí)行下面每行語(yǔ)句即可得到Sql語(yǔ)句的成本, 即為第二個(gè)語(yǔ)句執(zhí)行結(jié)果中第一行中TotalSubtreeCost字段值.

set showplan_all on
select * from sys.all_columns

 

第二個(gè)語(yǔ)句(select * from sys.all_columns)執(zhí)行結(jié)果:


再執(zhí)行 set showplan_all off結(jié)束查詢計(jì)劃分析結(jié)果.

 

此時(shí)可以應(yīng)用showplan_all來(lái)獲取Sql查詢的成本.

如下為C#簡(jiǎn)單實(shí)現(xiàn)上述應(yīng)用,在VS2k8中編譯通過(guò),只需正確更改Data Source即可運(yùn)行:

 

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;
}
}

}

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(1)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)