先说一下背景
1、网站类型:wcf服务
2、框架:.NET Framwork 4.0
3、EF版本:EntityFramework.6.2.0
4、数据库:SQL Server 2008 R2
表内数据500万+,一个普通的查询,带表连接(join),带分页(skip take),具体先不管这个查询怎么写的,因为神奇之处好像和查询本身并没有太大关系了,这个查询的作用是以管理员的ID为条件查询订单列表,表现为以下特点:
1、有的用户很快(毫秒级),有的用户很慢(30秒超时)
2、慢的用户的订单并不是都比快的用户的订单多(此处毫无规律,有的用户订单很少,反而很慢)
3、使用Sql server Profiler可以跟踪到慢语句,Duration确实是30秒+
4、把跟踪到的慢语句拷到查询分析器里执行,结果是毫秒级,也就是说只有在程序里慢
5、我发现语句执行的快慢和分页有关系,都是查询第一页的情况下,30条一页(take(30))就慢,29条一页就快(take(29)),关键问题是31条一页也快
有没有大牛可以给一些指导意见,造成此问题的原因大概可能是什么,或者朝哪个方向寻找思路和解决方案,谢谢
用Sql server Profiler看下生成的sql有问题么,数据量大不大,把sql拷贝出来放在服务器单独运行也这样么,是不是网络传输的问题