LINQ to SQL效率比较低的几个地方
LINQ to SQL确实是个好东西。以前大量的SQL语句、存储过程可以转变成code去维护,可以充分保证数据库与对象的一致性。但是通过LINQ生成的SQL语句则存在着一些效率低的地方。以下是我发现的几个地方。
1、where语句中的bool(数据库里为bit)类型
var q=
from t in db.table
where t.c==false
select t;
其生成的SQL语句的where部分是 (NOT (c=1)),使用showplan_text看到的索引使用情况则是 index seek:c<1 or c>1,效率肯定要比index seek:c=0低吧。你还可以将t.c==false改为t.c!=true或者!t.c,结果都是一样的。
2、update/delete[这个不算,Attach可以解决!~~谢谢@不若相忘于江湖!]
有时候希望只通过主键便将记录更新或删除,而不是先通过主键获得对象,然后去更新或删除,通过LINQ to SQL却很难做到,也许做不到。其生成的update语句中的where部分将所有列都传进去,也许有助于保证数据库的数据的一致性,防止取出数据后别人将其修改,但是这样效率确实不高,而且很难加上索引区优化,在表中数据比较大量的情况下,update/delete都会比较慢。也许这种情况不得不通过存储过程去解决。
LINQ to SQL比较方便,省却了一些需要学习T-SQL的烦恼。但对于一个不熟悉T-SQL的人,则会很容易写出效率比较低的代码,尤其是写出比较复杂的代码的时候。
欢迎指点,谢谢!
posted on 2008-09-20 13:11 RandomLife 阅读(3739) 评论(9) 编辑 收藏 举报