В DB2 8.2 существует множество ограничений для немедленного обновления MQT, и они могут оказать существенное влияние на производительность приложений, выполняющих запись в базовые таблицы. Тем не менее, вы можете иметь возможность использовать MQT. Однако вместо использования SELECT DISTINCT попробуйте сделать запрос похожим на:
select yourcolumn, count(*) as ignore
from union_all_view
group by yourcolumn
Столбец (yourcolumn) from должен быть определен как NOT NULL, чтобы это работало (в DB2 8.2). Оптимизатор может не выбрать этот MQT, если вы по-прежнему используете SELECT DISTINCT для представления объединения всех, поэтому вам может потребоваться запросить MQT (или представление, определенное поверх него) напрямую. Игнорировать столбец «игнорировать» в MQT - это только для DB2; если вы действительно не хотите его видеть, вы можете создать vew поверх MQT.
Однако это действительно проблема проектирования базы данных. Зачем вам нужно сканировать 180 миллионов строк данных, чтобы найти уникальные значения в определенном столбце? Почему эти значения уже не находятся в их собственной таблице, а внешние ключи определены для нее из каждой из 10 базовых таблиц?