1 (изменено: Евген, 2011-01-30 10:22:55)

Тема: SQL: помогите с оптимизацией запроса

Здравствуйте !
Помогите с составлением запроса, смысл в следующем:
Есть таблица (software) в которой собрано более 100 тыс. записей следующего содержания:
Date - дата инвентаризации
arm - имя автоматизированного рабочего места
software - название установленного программного обеспечения.

Один и тот же АРМ может иметь несколько результатов инвентаризации ПО по датам, но не более одного результата в день.
Нужно составить такой запрос, чтобы выдавался список всего ПО и количество его установок на АРМах, но состоящих из результатов самой последней инвентаризации по каждому АРМу. Потому что ненужное ПО уже могли деинсталлировать.
Я сделал такой запрос:

select b.software, count(b.software) from software b where b.date in (select max(a.date) from software a where a.arm=b.arm group by a.arm) group by b.software

Запрос работает, но ужасно долго... подозреваю что нужно сделать через использование EXISTS, но никак не получается, не пойму почему... :-(

Времени не хватает... :-(

2

Re: SQL: помогите с оптимизацией запроса

Не уверен что с этим запросом можно что-то существенное сделать(впрочем большим специалистом в SQL я не являюсь:)). С другой стороны, если такой запрос в течении дня нужно выполнять часто, то есть смысл сделать ещё одну таблицу (например, software_last), в которую раз в сутки(ночью) по шедулеру заносить последние данные по всем АРМ(предварительно очищая таблицу от старых данных). И уже из software_last получать информацию о кол-ве установок программ на рабочих местах.

3 (изменено: Евген, 2011-02-01 10:25:22)

Re: SQL: помогите с оптимизацией запроса

Тема закрыта...

Времени не хватает... :-(