表达式中的类型转换影响 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'));
我最近将兼容级别从 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'));