请教这两种写法的效率

Triumph 2011-10-30 12:45:04
表 A 和 B ,通过 B.aID = A.ID 关联,A 有 CreateDate 字段

如查询某一时间段,下面两种写法:

一:
SELECT a.f1, a.f2, a.f3, b.f1, b.f2 FROM a INNER JOIN b ON a.ID = b.aID
WHERE a.CreateDate>=[起始日期] AND a.CreateDate<=[终止日期]

二:
SELECT * FROM (SELECT a.CreateDate, a.f1, a.f2, a.f3, b.f1, b.f2 FROM a INNER JOIN b ON a.ID = b.aID) AS T
WHERE T.CreateDate>=[起始日期] AND T.CreateDate<=[终止日期]



理论讲第二个使用子查询,效率应该低。但现代查询器都会优化的,所以结果也不一定。

之所以问这样的问题,是因为在使用 .Net 的 Linq to Entities 时,不同的语句会产生上述差别的 SQL 语句。所以想请教大家。
...全文
138 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2011-10-30
  • 打赏
  • 举报
回复
执行计划应该是相同的,只是第两个多了一个编译。你看一下执行计划
中国风 2011-10-30
  • 打赏
  • 举报
回复
用第1个
bushy 2011-10-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bushy 的回复:]

为什么不试试第三种,我也查过类似的查询,感觉还是这种比较快
select a.*,b.f1,b.f2 from
(select SELECT a.f1, a.f2, a.f3 from a where a.CreateDate>=[起始日期] AND a.CreateDate<=[终止日期])a inner join b on a.ID = b.aID
[/Quote]
select a.*,b.f1,b.f2 from
(SELECT a.f1, a.f2, a.f3 from a where a.CreateDate>=[起始日期] AND a.CreateDate<=[终止日期])a inner join b on a.ID = b.aID

多了个select,复制错,呵呵
bushy 2011-10-30
  • 打赏
  • 举报
回复
为什么不试试第三种,我也查过类似的查询,感觉还是这种比较快
select a.*,b.f1,b.f2 from
(select SELECT a.f1, a.f2, a.f3 from a where a.CreateDate>=[起始日期] AND a.CreateDate<=[终止日期])a inner join b on a.ID = b.aID
-晴天 2011-10-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 triumph 的回复:]
也就是说,这两个实际效率是一样的?

那么,当数据量很大的时候呢?
[/Quote]
应该也差不多,因为它的执行计划是一样的.
Triumph 2011-10-30
  • 打赏
  • 举报
回复
也就是说,这两个实际效率是一样的?

那么,当数据量很大的时候呢?
-晴天 2011-10-30
  • 打赏
  • 举报
回复
执行计划完全一样.
-晴天 2011-10-30
  • 打赏
  • 举报
回复
查询开销50对50.
xqx_8888 2011-10-30
  • 打赏
  • 举报
回复
第一个
chuanzhang5687 2011-10-30
  • 打赏
  • 举报
回复
第一个效率高些

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧