sql性能从低到高:
1, 代码里面拼接sql
2,调用存储过程
3,参数话SQL
4,搭建数据调用平台: 合并一些相同或者o合的数据; 后台数据对开发人员黑盒, 开发人员只需要知道调用的接口,不需要知道具体的表, 专心写自己的code
不要再使用拼接sql的方式,使用参数化sql的方式。
Database db;
DbCommand dbCommand;
db = DatabaseFactory.CreateDatabase(StrConnUserDB);
StringBuilder builder = new StringBuilder("select top ");
builder.Append(top);
builder.Append(" hotel_id, count(1) as countN ");
builder.Append(" from memberHotel with(nolock) ");
if (cityCondition == string.Empty)
{
builder.Append(" where 1=0 ");
}
else
{
builder.Append(" where hotel_id in (");
builder.Append(cityCondition);
builder.Append(") ");
}
builder.Append(" group by hotel_id ");
builder.Append(" order by count(1) Desc ");
之前的老代码或sp代码可能存在一些in(xxxx)的列表查询,而in的参数本身是动态产生的,这种代码在以前访问量不是主要瓶颈的时候还不是很突出,但是目前数据量和性能要求越来越高的今天,已经不合时宜了。
因此如果各位同事以后在看到这种类似的 sql 拼接代码时,顺手为之优化一下吧
外部传来的一个列表,如订单列表,酒店列表等,要从数据库一次返回这些订单列表或酒店列表的相关信息。大部分情况下开发人员都是通过拼接sql解决的。拼接sql所带来的问题是,每次sql进来对于db来说都是不一样的,无法重用之前的执行计划,导致性能低下(有些数据库如sqlserver会智能的做cache,但是很不可靠)。