В оптимизации одного из подзапросов я дошел до такого состояния:
SELECT foo.id
FROM foo
INNER JOIN bar AS f ON foo.id = bar.foo_id
GROUP BY foo.id
HAVING MAX(foo.baz) != MAX(bar.baz)
Важно здесь следующее:
Не нравится хак с агрегатной функцией в HAVING — если применительно к полю bar.baz оно имеет смысл (выбираем только те записи, для которых поле foo.baz не равно максимальному bar.baz), то в случае с полем foo.baz оно используется исключительно для того, чтобы убрать поле из блока SELECT. Плюс, есть риск того, что max(*) возвращает не ожидаемый результат.
Как улучшить запрос?
Мне казалось что бизнесу главное что бы было правильно и быстро. Можно попробовать такой вариант с временной таблицей, должно быть быстрее.
select bar.foo_id, MAX(bar.baz) baz
into #bar
from bar
group by bar.foo_id
create index ix on #bar (foo_id, baz)
select foo.id
from foo
join #bar bar on foo.id = bar.foo_id AND foo.baz <> bar.baz
Сборка персонального компьютера от Artline: умный выбор для современных пользователей