Eu tenho um banco de dados (de um aplicativo de fornecedor) que por algum motivo desconhecido tem um UDDT em quase todas as colunas, mesmo quando o UDDT é logicamente o mesmo que o tipo subjacente que ele implementa. Por exemplo, uma coluna neste banco de dados pode ser de UDDT bTinyInt(TinyInt)
.
Duas tabelas neste banco de dados têm colunas que compartilham exatamente o mesmo UDDT. Por exemplo TableA.Field1
, é do tipo bVarchar(VARCHAR(10))
e TableB.Field2
também é bVarchar(VARCHAR(10))
.
Ao unir essas duas tabelas pelos campos mencionados, observo um aviso no plano de execução informando um problema de cardinalidade porque esses campos estão sendo convertidos implicitamente para VARCHAR(MAX)
.
É sempre o caso de UDDTs serem convertidos implicitamente quando usados como predicados, mesmo ao comparar o mesmo UDDT?
Também não tenho certeza se isso importa também, mas o banco de dados ao qual essas duas tabelas pertencem é de agrupamento Latin1_General_BIN
.
Não consigo reproduzir nenhum aviso ou diferença de desempenho neste cenário, mesmo ao ingressar em
bVarchar
arquivosvarchar(10)
. POR EXEMPLOsaídas
Não há problema de desempenho com o
UDDTs
. Não há mensagem de Aviso quandoUDDTs
é usado em Predicado.Razão :
Nesta consulta observe que o otimizador
system_type_id
&user_type_id
.Sql já conhece e usa o tipo de dados do sistema.