zoukankan      html  css  js  c++  java
  • 获取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}行数据
    查询耗时{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

    运行截图:

  • 相关阅读:
    RSS Reader in PC & iPhone
    Implementation Notes: Runtime Environment Map Filtering for Image Based Lighting
    A implementaion for 2D blue noise
    Specular Aliasing与Specular Leaking
    PBR Metallic/Roughness工作流中Albedo与F0的计算方法
    Mathematica .nb程序运行不下去的原因
    关于ddx/ddy重建法线在edge边沿上的artifacts问题
    make: 警告:检测到时钟错误。您的创建可能是不完整的。
    C++ 变长模板参数
    CMake set 语法
  • 原文地址:https://www.cnblogs.com/527289276qq/p/4591891.html
Copyright © 2011-2022 走看看