首页 新闻 会员 周边

net core ef生成的这两种sql语句在性能上有区别吗

0
[已解决问题] 解决于 2020-02-14 22:06

第一种
exec sp_executesql N'SELECT [u].[Id], [u].[LoginName], [u].[KSH], [u].[TrueName], [u].[Sex], [u].[CollegeName], [u].[ProjectName], [u].[CardId], [t].[OkEndTime], [t].[Status], [t].[Remark], [u].[ReportYear], [u].[CreateDate]
FROM [WNA_NewUser] AS [u]
LEFT JOIN (
SELECT [u0].*
FROM [WNA_EnrolmentReport] AS [u0]
) AS [t] ON [u].[Id] = [t].[UserId]
WHERE (0 <> 1) AND ([u].[Sex] = @__param_Sex_0)
ORDER BY [u].[CreateDate] DESC
OFFSET @__p_1 ROWS FETCH NEXT @__p_2 ROWS ONLY',N'@__param_Sex_0 nvarchar(10),@__p_1 int,@__p_2 int',@__param_Sex_0=N'男',@__p_1=0,@__p_2=10

第二种
exec sp_executesql N'SELECT [a].[Id], [a].[LoginName], [a].[KSH], [a].[TrueName], [a].[Sex], [a].[CollegeName], [a].[ProjectName], [a].[CardId], [b].[OkEndTime], [b].[Status], [b].[Remark], [a].[ReportYear], [a].[CreateDate]
FROM [WNA_NewUser] AS [a]
LEFT JOIN [WNA_EnrolmentReport] AS [b] ON [a].[Id] = [b].[UserId]
WHERE (0 <> 1) AND ([a].[Sex] = @__param_Sex_0)
ORDER BY [a].[CreateDate] DESC
OFFSET @__p_1 ROWS FETCH NEXT @__p_2 ROWS ONLY',N'@__param_Sex_0 nvarchar(10),@__p_1 int,@__p_2 int',@__param_Sex_0=N'男',@__p_1=0,@__p_2=10

代码小六的主页 代码小六 | 初学一级 | 园豆:12
提问于:2019-09-15 21:28
< >
分享
最佳答案
0

区别在于 SELECT [u0].* ,如果实际需要 SELECT 的字段很少,性能影响可能很大

奖励园豆:5
dudu | 高人七级 |园豆:30994 | 2019-09-15 21:56

理解的确是这样理解,但是sql server执行计划,两种都是一样的,查询时间也没啥区别,测试数据主表20万,副表200万数据。

代码小六 | 园豆:12 (初学一级) | 2019-09-16 08:45

@代码小六: 如果都是走聚集索引取数据,SELECT [u0].* 主要是传输数据的开销大一些;如果 SELECT 更少的字段可以在索引中直接取到数据,查询速度会更快。

dudu | 园豆:30994 (高人七级) | 2019-09-16 10:48

@dudu: 测试了 select *, select 个别字段,每种情况的执行计划,耗时都没有区别

代码小六 | 园豆:12 (初学一级) | 2019-09-29 14:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册