调试几天后的主要更新:
我运行几个类似于以下内容的查询:
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个查询从占用不到一秒钟的时间转到超过一分钟。
我从复制了准确的查询,当直接在数据库上运行时,它在不到一秒钟的时间内就会预先形成。我开始对查询进行更改,发现对查询的任何更改都会将其返回到1秒的性能,甚至在语句之间添加一个空格。但是,当我将它返回到它原来的精确状态时,它将花费60+秒。
核心问题:--所以,我有一个修复程序,但是,什么会导致查询以不同的方式运行,即使只做了像空格一样小的更改?
发布于 2011-01-28 20:28:23
执行计划是否可能已损坏?您能尝试显式清除计划缓存吗?http://msdn.microsoft.com/en-us/library/aa175244(v=sql.80).aspx
https://stackoverflow.com/questions/4795825
复制相似问题