最近在调研数据库查询时因使用IEnumerable进行Linq to entity的操作,造成数据库访问缓慢。此文讲述的便是IEnumerable和IQueryable的区别。
微软对IEnumerable的定义使用场景为Linq to Object,也就是涉及到内存操作时使用。而对IQueryable的定义使用场景为Linq to SQL(Entity)。
因此,在执行Linq to SQL(Entity)的操作时,如果使用IEnumerable则会造成全表查询。如下图Code:
如此,在SQL Profile监测到的执行语句为两次全表查询。
然而,当我们正确使用IQueryable或者var时,如下图Code:
得到的查询语句为:
为了一探IEnumerabel和IQueryable在实际工作中的程序执行效率,总结来下图的时间对比:
在这张图上看到的时间单位虽然为毫秒,但这是代码同步执行语句的查询时间,但多个客户端同时访问数据库时,此时造成的数据访问速度就不再是毫秒了。
墨匠