不一定是Distinct的原因,建议检查一下是否是索引的问题
我是用注释代码的方式调试,结果到Distinct那下运行时间降了一半,Distinct里面的参数也是导航属性的字段来的。
另外我创建了几个相关外键的索引,貌似运行时间又多了百来ms。这个够汗。
@BorgChen: 用SQL Profiler捕获一下实际执行的SQL,然后在Management Studio运行这个SQL并看一下执行计划。
@dudu: 汗的,用SQL Profiler看,有好几个语句都是select...from T where (select ...from T where (select....fromT ))这种形式,不慢才怪,其中一个我拷到Management Studio中运行了一下,949ms。无语了。
另外,dudu,我根据你上次说的去看了一些表达式树的资料,但是好像都没用到导航属性的。
@BorgChen: 表达式树与导航属性没有关系
@dudu: 搞不懂为什么
list=_db.Ts.Where(A);
list=list.where(B)
会被编译成嵌套的select而不是select* from T where A&B
@BorgChen: 嵌套的不一定有性能问题,要看实际的执行计划
建议通过一些工具(如SQL Server Profiler)来进行监测,找出实际执行的SQL语句,然后分析是什么原因导致慢,是否有索引没有添加等等。
Distinct性能 问题 这种问题在数据量达到100万之前可以直接忽略
建议用缓存解决
汗了,这个表才一万多条记录
GROUP BY 比Distinct要好些
EF自动生成的SQL语句,会有两个嵌套的 Group By ,比单个 Group By 执行要快。
楼主从以下几点优化查询
1、尽量少嵌套的sql语句。
2、索引是否优化?
3、能否用存储过程/函数代替?
4、数据量不是非常大的时候尽可能使用With函数。