Parece que apenas os primeiros n caracteres são usados como colvalue para colunas varchar/vargraphic. Do meu teste abaixo, parece ser 33/16. O comprimento está documentado em algum lugar? Tentei pesquisar a documentação, mas não consigo encontrar nada (provavelmente procurando a coisa errada)
Caso de teste simples:
DROP TABLE LEJO0004.T;
CREATE TABLE LEJO0004.T (
ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY
( START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 NO CYCLE CACHE 20 NO ORDER ),
TCOL_C VARCHAR(64) NOT NULL,
TCOL_G VARGRAPHIC(64) NOT NULL
);
insert into LEJO0004.T (tcol_c, tcol_g)
with n100 (n) as ( values 0 union all select n+1 from n100 where n<100 )
, n10 (n) as ( values 0 union all select n+1 from n10 where n<10 )
, n1 (n) as ( values 0 )
select 'commons.domain.regel.avbrottsregel'
, 'commons.domain.regel.avbrottsregel'
from n100
union all
select 'commons.domain.regel.grupp.overfors.nya.endast.som.merit'
, 'commons.domain.regel.grupp.overfors.nya.endast.som.merit'
from n10
union all
select 'commons.domain.regel.ingar.i.grupp.overfors.till.nya'
, 'commons.domain.regel.ingar.i.grupp.overfors.till.nya'
from n1;
runstats on table lejo0004.T with distribution on all columns;
select cast(colname as varchar(15))
, type
, seqno
, cast(colvalue as varchar(40))
, valcount
from sysstat.COLDIST
where tabschema = 'LEJO0004'
and tabname = 'T'
and colname in ('TCOL_C', 'TCOL_G')
and colvalue is not null
and type = 'F'
order by type, colname, seqno;
Resultado é:
TCOL_C F 1 'commons.domain.regel.avbrottsrege' 101
TCOL_C F 2 'commons.domain.regel.grupp.overfo' 11
TCOL_G F 1 g'commons.domain.r' 113
Parece ser o mesmo para Q
values char_length(g'commons.domain.r' using codeunits32)
16
values char_length('commons.domain.regel.avbrottsrege' using codeunits32)
33
Testado em:
db2level
DB21085I This instance or install (instance name, where applicable:
"lejo0004") uses "64" bits and DB2 code release "SQL11050" with level
identifier "0601010F".
Informational tokens are "DB2 v11.5.0.0", "s1906101300", "DYN1906101300AMD64",
and Fix Pack "0".
Product is installed at "/home/lejo0004/sqllib".
É "parcialmente documentado"/"não realmente documentado" AFAIK. Mais especificamente, existe o APAR:
IT13369: DESEMPENHO DE CONSULTA ABAIXO DO ÓTIMO QUANDO ESTATÍSTICAS DE DISTRIBUIÇÃO COLETADAS NA COLUNA DE CADEIA COM UM PREFIXO COMUM MAIOR QUE 32 BYTES
que o menciona. Suponho que o que realmente importa são as estimativas de cardinalidade para uma consulta que tem predicado em uma coluna que tem um prefixo comum, caso em que você pode tentar a solução alternativa (ou seja, NÃO coletar estatísticas de distribuição para essa coluna)