獲取sql執行時間


 

sql server中獲取要執行的sql或sql塊的執行時間,方法之一如下:

declare @begin datetime,@end datetime
set @begin =getdate()
--your sql
set @end=getdate()
PRINT DATEDIFF(millisecond, @begin, @end)/1000.0 --單位:s

 

測試執行getdate()方法要花多長時間:

declare @begin datetime,@end datetime
set @begin =getdate()
select getdate()
set @end=getdate()
PRINT DATEDIFF(millisecond, @begin, @end)/1000.0 --單位:s

 

執行結果截圖如下:

在消息中,可見執行getdate()方法的時間是極短,可以忽略不計!

 

下面,以查詢我本地的[user]表為例進行測試:

執行后的當前時間減去執行前的當前時間,即為sql或sql塊的執行用時。

項目中,程序想拿到這個時間,只需把這個sql塊封裝成一個存儲過程,存儲過程有一個output參數,

把最后一行的print換成賦值給output輸出參數即可。

存儲過程如下:

CREATE PROCEDURE GetExecuteTimeProc
@executeTime decimal(18,3) output
 AS 
 begin
 declare @begin datetime,@end datetime
   set @begin =getdate()
   select * from [user]
   waitfor delay'00:00:5'--暫停5秒,模擬查詢
   set @end=getdate()
   set @executeTime=cast((DATEDIFF(millisecond, @begin, @end)/1000.0) as decimal(18,3))
 end
GO

 

測試demo代碼:

  static void Main(string[] args)
        {
            string sql = "GetExecuteTimeProc";
            SqlParameter[] parameters = 
                {
                  new SqlParameter("@executeTime",SqlDbType.Decimal){Direction=ParameterDirection.Output,Value=0}
                };
            DataTable dt = DBHelper.ExecuteSelect(sql, parameters,CommandType.StoredProcedure).Tables[0];
            decimal executeTime = Convert.ToDecimal(parameters[0].Value);
            int rowCount = 0;
            if (dt != null)
            {
                rowCount = dt.Rows.Count;
            }
            Console.WriteLine("一共有{0}行數據\n查詢耗時{1}秒",rowCount,executeTime);
            Console.ReadKey();
        }

DBHelper類:

public class DBHelper
    {
        public static DataSet ExecuteSelect(string sql, SqlParameter[] param, CommandType commandType)
        {
            string ConnectionString = Properties.Resources.conStr.ToString();
            DataSet ds = new DataSet();
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                conn.Open();
                using (SqlCommand cmd =new SqlCommand(sql,conn))
                {
                    try
                    {
                        cmd.CommandType=commandType;
                        if (param != null)
                        {
                            foreach (var item in param)
                            {
                                cmd.Parameters.Add(item);
                            }
                        }
                        SqlDataAdapter sda=new SqlDataAdapter(cmd);
                        sda.Fill(ds);
                    }
                    catch (Exception ex)
                    {
                            throw;
                    }
                }
            }
            return ds;
        }
    }
View Code

 

運行截圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM