sql - 在类型转换中需要有关 SQL Server 中执行计划的帮助
问题描述
我在执行计划中收到以下警告。请一些人提供有关如何解决此错误的建议。
表达式中的类型转换 (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)
解决方案
基本上,警告消息表明,由于类型转换,索引不能在派生表中使用。我认为这在这里并不重要,因为派生表本身是基于已解析的文字字符串的 - 所以根本不可能有索引。
附带说明:您真的需要将此值作为文字 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
顺便说一句,这将避免警告(不需要转换,因为值是从正确的数据类型开始的)。但是,再一次,我认为你不应该担心这个警告。
推荐阅读
- java - ADFC-12000:请求中的状态 ID 对于当前会话无效
- node.js - 需要在嵌套对象 mongoose 中查找未使用的数字
- grafana - 如何限制从浏览器的查询参数中获取的 grafana 仪表板变量?
- react-native - ToastAndroid 背景颜色 [React-Native]
- latex - 在 MarkDown 图形块中使用 jinja2 上下文变量
- kotlin - quarkus-hibernate-orm 抱怨 `PanacheEntity` 和 `PanacheEntityBase` 没有合适的持久性单元
- macos - brew upgrade 删除 BigSur 中的停靠图标
- angular - 如何将 SQL 查询转换为 firebase 实时数据库查询?
- django - How to add custom view page to django admin?
- java - 如何将单个 @XmlAttribute 注释添加到可适用于该类中所有对象的类