我在ASP.NET MVC中使用linq查询一个表,里面有80w+的数据。
SaleKey为1的数据有70w条。
用linq写了一个类似
DataBase db = new DataBase(); int i = 1; var temp = db.Fruits.Where(f => f.SaleKey == i && f.MainKey > 0);
MainKey是主键。
碰到的问题比较复杂,我试了很多条件了。
代码块里列出的Linq在运行时会超时,30s的响应时间。
什么where条件都不加,1s加载。查看sql源码是用MainKey>=1作条件查找的。
f.MainKey > 0的条件下
把 i 换成1,1秒加载
把 i 的相关条件改成string,1秒加载
f.SaleKey == i 的条件下
f.MainKey >= 1,1秒加载
f.MainKey >= -1,1秒加载
把where条件调换,1秒加载。即.Where(f.MainKey > 0 && f.SaleKey == i).
以上的5种查询,看了sql源码后发现执行写的Linq后都进行了以MainKey >=1的查找。
发现问题好像就是.Where(Int的引用 && 默认查找键>0)这两个条件引起了超时。
同事将引发超时的源码输入SSMS,1秒不到就加载好了。
调试出 运行时真正执行的SQL语句,到数据库里跑。
另外,看看 SaleKey 的索引什么情况。