表达式中的类型转换影响 CardinalityEstimate - 来自 XML 的数据

Type conversion in expression affect CardinalityEstimate - data from XML

我最近将兼容级别从 100 更改为 130,现在我的一些查询出现了一些问题。

举个例子:

declare @msg_data_xml xml;
declare @msg_data nvarchar(max) = '<ns1:SHPPLT xmlns:ns1="http://test.com/test"><ns1:MSG><ns1:GUID>BFE542A5-0761-AA07-E050-010A32017E4D</ns1:GUID></ns1:MSG><ns1:HEADER><ns1:SEAL_NUM>N01634959</ns1:SEAL_NUM></ns1:HEADER></ns1:SHPPLT>'
set @msg_data_xml = cast( @msg_data as xml)
    
;with   xmlnamespaces('http://test.com/test' as n)
select      
            COM_SEAL_NUM = h.hi.value('(n:SEAL_NUM)[1]', 'nvarchar(100)')   
from    @msg_data_xml.nodes('n:SHPPLT/n:HEADER') h(hi)

这给了我警告:

Type conversion in expression (CONVERT_IMPLICIT(nvarchar(100),[Expr1015],0)) may affect "CardinalityEstimate" in query plan choice;

知道我该怎么做才能避免这种情况吗?

重写查询或使用提示强制进行遗留基数估计:

OPTION (USE HINT ('FORCE_LEGACY_CARDINALITY_ESTIMATION'));