2012-05-03 7 views
1

Я использую следующий запрос,SQL Оптимизация запроса

SELECT qTermine.REISENR, 
     qTermine.REISEVON, 
     qTermine.REISEBIS, 
     MIN(qPreise.PREIS) AS PREIS 
FROM qTermine, 
     qPreise 
WHERE qPreise.REISENR = qTermine.REISENR 
     AND qPreise.PROVKLASSE = 1 
     AND qPreise.VERFUEGBAR <> 0 
GROUP BY qTermine.REISENR, 
      qTermine.REISEVON, 
      qTermine.REISEBIS 

Я только хочу, чтобы выбрать те строки, где цена минимальна.

В порядке или мы можем это оптимизировать?

+0

Я думаю, что достаточно хорошо – Nick

+0

я надеюсь, что вы не использовать это, чтобы решить, куда поехать в отпуск , Серьезно, все выглядит нормально. Вы также можете записать его как неагрегированный подзапрос. Вам нужно будет проверить, что быстрее. Возможно, посмотрите планы с соответствующими данными. – joshp

+0

Я думаю, что это нормально с точки зрения оптимизации. Но я не понимаю, почему вы используете 'AS PREIS' часть. Как я вижу, вы никогда не используете это обозначение в своем коде. –

ответ

2

Запрос сам по себе хорош, как есть. Трудно ответить на этот вопрос, так как для большинства применений то, что вы написали, прекрасно. Вы в настоящее время испытываете проблемы с производительностью, или этот запрос выполняется с минимальными затратами времени? Или вы просто осторожны и хотите избежать введения большого узкого места? В случае последнего я не думаю, что вам нужно беспокоиться; опять же, в большинстве случаев это нормально.

Удостоверьтесь, что у вас есть индекс на REISENR на обеих столах и на qPreise.PREIS. Что касается PROVKLASSE и VERFUEGBAR У меня такое ощущение, что они не будут достаточно уникальными для индексов, чтобы они когда-либо использовались, если бы вы их добавили (вы можете проверить это в своем плане выполнения), но трудно сказать, не зная, данные.

0

Вы запрос хорошо, и Вы можете иметь более высокую производительность, если у вас есть индекс на «qPreise.PREIS»

Смежные вопросы