0

我在执行计划中收到以下警告。请一些人提供有关如何解决此错误的建议。

表达式中的类型转换 (CONVERT(int,STRING_SPLIT.[value],0)) 可能会影响查询计划选择中的“CardinalityEstimate”

在此处输入图像描述

上面的警告见于下面的 SQL 语句

SELECT TE.value AS GroupID
    ,ISNULL(TM.TotalCount, 0) AS GroupCount
FROM #tblWorkQueueDocuemnt TM
RIGHT OUTER JOIN (
    SELECT CONVERT(INT, value) AS value
    FROM STRING_SPLIT('1,2,3,4', ',')
    ) TE ON TM.GroupID = TE.value

#tblWorkQueueDocuemnt :创建表的语句。创建表#tblWorkQueueDocuemnt(GroupID INT,TotalCount INT)

4

2 回答 2

3

基本上,警告消息表明,由于类型转换,索引不能在派生表中使用。我认为这在这里并不重要,因为派生表本身是基于已解析的文字字符串的 - 所以根本不可能有索引。

附带说明:您真的需要将此值作为文字 CSV 字符串传递吗?如果使用 构建适当的派生表会更简单values(),如下所示:

select te.value as groupid, coalesce(tm.totalcount, 0) as groupcount
from (values (1), (2), (3), (4)) as te(groupid)
left join #tblworkqueuedocuemnt tm on tm.tm.groupid = te.value

顺便说一句,这将避免警告(不需要转换,因为值是从正确的数据类型开始的)。但是,再一次,我认为你不应该担心这个警告。

于 2020-10-17T08:42:07.570 回答
0

每当他们进行隐式转换时,这都是一件旧事。

在您对字段进行隐式转换的情况下,它可能无法使用索引。类似于您对其进行了显式的 CAST 或 CONVERT 。

如果它运行良好并且没有问题,请忽略它。

参见例如https://www.brentozar.com/archive/2018/10/we-need-to-talk-about-the-warnings-in-your-query-plans/

在您的情况下,如果需要,您可以将 string_split 之后的值显式转换为整数。它在技术上更清洁,但可能根本不会提高性能。

于 2020-10-17T08:38:59.470 回答