在我的项目中,我必须从SQL中检索大量数据并将数据映射到对象字段;像这样的东西:
cu.UnitName = dr["UnitName"].ToString().Trim();
cu.LocalId = DbUtil.RemoveNull(dr["LocalID"], "");
cu.DatabaseName = DbUtil.RemoveNull(dr["DatabaseName"], "");
cu.DatabaseServer = DbUtil.RemoveNull(dr["DatabaseServer"], "");
cu.UserName = DbUtil.RemoveNull(dr["UserName"], "");
cu.Password = DbUtil.RemoveNull(dr["Password"], "");
cu.RoleId = DbUtil.RemoveNull(dr["RoleId"], 0);
DbUtil.RemoveNull
跟随int
版本,string
版本类似):
public static int RemoveNull(object data, int defaultValue)
{
if (data is DBNull || data == null)
return defaultValue;
return int.Parse(data.ToString());
}
所以我想知道SQL的COALESCE
或ISNULL
是否可以更快地完成相同的工作。有人做过类似的比较吗?哪种方式会更有效率?
答案 0 :(得分:0)
从数据库返回数据时,您可以
select COALESCE (data ,defaultValue) from table
会更快,因为不需要从前端代码执行RemoveNull函数
答案 1 :(得分:0)
cu.LocalId = dr["LocalId"] ?? "";
答案 2 :(得分:0)
而是在你的sql中使用以下语句:
SELECT ISNULL(value,0)
当存在NULL时,它将始终返回0。所以你不必在代码端转换它。
答案 3 :(得分:0)
'COALESCE'返回其参数中的第一个非空表达式,因此您可能会使用ISNULL
。
在数据库查询中使用ISNULL
会快得多。想象一下,你有1m的记录,并且你调用一个C#方法1次,这肯定需要一些时间来执行。
另一方面,SQL引擎已经过优化,可以处理大量记录。但这不够灵活。您不能使用某些复杂的逻辑并轻松更改默认值。