Life is random

人生是一次小概率事件

导航

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编辑  收藏  举报