經查發現問題出在SqlCommand參數化查詢使用 AddWithValue,
改善後 原查詢耗時 950 ms 調整後為 24 ms!
參考: 史丹利好熱 的相關文章:
[.NET] ADO.NET Parameters.AddWithValue 對於SqlDbType的抉擇
AddWithValue 參數化查詢時,在DbType的選擇是採.NET資料類型來決定,若查詢參數型別與實際欄位不同時有時可能會造成額外的成本。
解決方式:
不要使用AddWithValue,改用 SqlParameter,並指定 SqlDbType
範例:
SqlCommand cmd = new SqlCommand(qs, sqlConnection);
SqlParameter p_gen01 = new SqlParameter();
p_gen01.SqlDbType = SqlDbType.VarChar;
p_gen01.ParameterName = "@empno";
p_gen01.Value ="ep0020";
若使用Dapper 指定型態方式,參考範例:
var result = sqlConnection.Query(qs,
new { empno = new DbString() {
Value = "ep0020",
IsAnsi = true, } });