Основна актуализация след няколко дни отстраняване на грешки:
Пускам няколко заявки, подобни на:
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 Profiler и когато се стартира директно в базата данни, тя се формира за по-малко от секунда. Започнах да правя промени в заявката и открих, че всяка промяна в заявката ще я върне до производителност от 1 секунда дори добавяне на един интервал между израз. Но веднага щом го върнах в първоначалното му точно състояние, това ще отнеме 60+ секунди.
Основен въпрос: И така, имам решение, но какво може да накара дадена заявка да се изпълнява по различен начин дори само с малка промяна като интервал?