重大更新:
我运行了一些类似于:
的查询SELECT RTRIM(part) as part
FROM tableP pm
LEFT join tableS s on pm.id = s.id
INNER JOIN tableC cm ON cm.id = pm.id
WHERE name = 'NGW' AND status NOT IN ('NL', 'Z')
GROUP BY RTRIM(part), isnull(s.value,0)
ORDER BY isnull(s.value,0)
它像Java一样运行:
PreparedStatement select = con.prepareStatement(
"SELECT RTRIM(part) as part" +
"FROM tableP pm " +
"LEFT JOIN tableS s ON pm.id= s.id " +
"INNER JOIN tableC cm ON cm.id= pm.id " +
"WHERE name =? AND status NOT IN ('NL', 'Z') " +
"GROUP BY RTRIM(part), isnull(s.value,0) " +
"ORDER BY isnull(s.value,0) " );
select.setString(1, name);
ResultSet rs = select.executeQuery();
while(rs.next()){
... Data is Loaded...
查询在Java应用程序中运行良好。突然,这个表格的3或4个查询从不到一秒钟到超过一分钟。
我已经从SQL事件探查器中复制了确切的查询,并且当直接在数据库上运行时,它会在不到一秒的时间内执行。我开始对查询进行更改,发现查询的任何更改都会将其返回到1秒的性能甚至在语句之间添加单个空格。但是一旦我将它恢复到原来的确切状态,它将需要60多秒。
核心问题: 所以,我有一个修复,但是什么可能导致查询以不同的方式运行,即使只有像空白一样小的变化?
答案 0 :(得分:1)
执行计划是否可能已损坏?你能尝试明确清除计划缓存吗? http://msdn.microsoft.com/en-us/library/aa175244(v=sql.80).aspx