当我开始对我的存储过程参数使用数据类型[bigint]
时,我注意到我的应用程序存在严重的性能问题。以下快速代码的参数数据类型为[nvarchar](50)
。下面是我更改的一些代码,这个简单的调用来自< 1秒(快速代码)到超过20秒(慢速代码)。可能导致此问题的原因是什么?我如何使用[bigint]
但保持性能?我正在使用.NET 4.0的Enterprise Library 5(数据库应用程序块)。
之前(快):
Database db = DatabaseFactory.CreateDatabase("APP");
DbCommand cmd = db.GetStoredProcCommand("sp_test");
db.AddInParameter(cmd, "@crud_command", DbType.String, "read");
db.AddInParameter(cmd, "@network_login", DbType.String, "abc231");
db.AddInParameter(cmd, "@id_filter", DbType.String, id_filter);
DataSet ds = db.ExecuteDataSet(cmd);
之后(慢):
Database db = DatabaseFactory.CreateDatabase("APP");
DbCommand cmd = db.GetStoredProcCommand("sp_test");
db.AddInParameter(cmd, "@crud_command", DbType.String, "read");
db.AddInParameter(cmd, "@network_login", DbType.String, "abc231");
db.AddInParameter(cmd, "@id_filter", DbType.Int64, Convert.ToInt64(id_filter));
DataSet ds = db.ExecuteDataSet(cmd);
答案 0 :(得分:0)
你必须检查db中的类型,确保参数的类型与你要查询的列相同(我猜它是varchar,而不是bigint)。如果它们不同,那么同事将进行转换,并且sql server将不使用索引(无法优化)。