我有一个数据库(来自供应商应用程序),由于某种未知原因,几乎每一列都有一个 UDDT,即使 UDDT 在逻辑上与其实现的基础类型相同。例如,此数据库中的列可能是 UDDT bTinyInt(TinyInt)
。
此数据库中的两个表具有共享完全相同的 UDDT 的列。例如TableA.Field1
是 类型bVarchar(VARCHAR(10))
并且TableB.Field2
也是bVarchar(VARCHAR(10))
。
当我通过上述字段将这两个表连接在一起时,我注意到执行计划中的警告指出基数问题,因为这些字段被隐式转换为VARCHAR(MAX)
.
UDDT 在用作谓词时是否总是会隐式转换,即使在比较相同的 UDDT 时也是如此?
也不确定它是否也很重要,但是这两个表所属的数据库是 collation Latin1_General_BIN
。
在这种情况下,我无法重现任何警告或性能差异,即使
bVarchar
加入varchar(10)
. 例如输出
没有性能问题
UDDTs
。UDDTs
在谓词中使用时没有警告消息。原因 :
在此查询中,请注意
system_type_id
&user_type_id
.Sql optmizer 已经知道并使用系统数据类型。