O problema está listado como resolvido em 9.7.1, mas o mesmo existe em todas as versões 11.5 e 11.1 recentes.
IC62904: PROBLEMA EXP0059W PARA STATVIEWS COM SELECT DISTINCT .
Ainda o mesmo EXP0059W no plano de acesso.
Os passos para reproduzir:
connect to mydb;
create table ta (a1 int);
create table tb (b1 int);
create view sv as (select * from ta where a1 in (select b1 from tb));
alter view sv enable query optimization;
explain all with snapshot for
select * from ta where a1 in (select b1 from tb);
!db2exfmt -d mydb -1 -o sv.plan;
O plano de acesso contém a seguinte mensagem semelhante à descrita no link:
Diagnostic Details: EXP0059W The following MQT or statistical view was
not eligible because of one or more of the
following reasons: (1) the MQT had extra table
joins or GROUP BY columns that were not present in
the query, or (2) the query had an SQL construct
such as ORDER BY, FETCH FIRST n ROWS, DISTINCT, or
had a subquery that could not be matched:
"DB2ADMIN"."SV".
Não consigo abrir um Caso com suporte IBM.
A questão é: alguém sabe como resolver o problema com, digamos, alguma configuração de variável de registro ou com outras facilidades?
Você pode reformular sua consulta na exibição?
[...]
Eu tentei com:
mas não parece melhorar as coisas
Algumas observações adicionais, não sei se ajuda. Uma visão como:
não pode ser usado para otimizar consultas (SQL20278W), mas:
posso. Se olharmos para a consulta:
é otimizado como:
Se adicionarmos restrições adicionais:
a consulta é otimizada como:
Portanto, o Db2 pode usar a visualização para a instrução otimizada:
Você pode adicionar algumas restrições que eliminam a necessidade de DISTINCT na consulta otimizada?
Uma maneira perigosa é adicionar uma restrição informativa: