任何人都可以帮助我理解以下查询的sql Server执行计划吗?
我希望子查询版本(查询2)执行得更快,因为它是基于集合的.这似乎是独立运行查询时的情况 – 稍微 – 但执行计划显示查询成本分别为15%和85%:
//-- Query 1 (15%) - Scalar Function SELECT gi.galleryImageId,gi.FbUserId,dbo.GetgalleryImageVotesBygalleryImageId(gi.galleryImageId) AS Votes FROM galleryImage gi //-- Query 2 (85%) - Subquery SELECT gi.galleryImageId,(SELECT COUNT(*) FROM galleryImageVote WHERE galleryImageId = gi.galleryImageId) FROM galleryImage gi
我在这里想念的是什么;执行计划是否会跳过功能的成本?此外,有关CTE或OVER / PARTITION查询是否更好地提供上述任何一项的任何建议?
先感谢您!
解决方法
永远不要相信执行计划.
让您了解计划是什么非常有用,但如果您想要真正的指标,请始终打开统计数据
让您了解计划是什么非常有用,但如果您想要真正的指标,请始终打开统计数据
set statistics io on set statistics time on
..并比较实际执行情况.统计数据可能会说预期为15%/ 85%,但实际情况会显示实际转化为什么.
性能调整没有灵丹妙药.随着数据的形状或分布发生变化,即使“最佳”查询也会随着时间而变化.
CTE不会有太大的不同,我不确定您打算如何对此进行PARTITION查询,但您可以尝试左连接表单.
SELECT gi.galleryImageId,count(v.galleryImageId) AS Votes FROM galleryImage gi LEFT JOIN galleryImageVote v ON v.galleryImageId = gi.galleryImageId GROUP BY gi.galleryImageId,gi.FbUserId
原文地址:https://www.jb51.cc/mssql/74910.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。