这样的SQL语句有区别吗?

bulesky_xshp 2008-03-19 03:54:59
Select * from (Select * from A where A.Fnumber like 'AA%')
left ouer join B on A.Fguid= B.FPID

Select * from A
left outer join B
on A.FGUID = B.FPID
where A.Fnumber like 'AA%'

这样两句SQL在执行时会有什么差异吗?
...全文
103 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sp4 2008-03-20
  • 打赏
  • 举报
回复
上面说的差不多了。

通常书写格式应该是第2种更加标准些。

就效率而言,和数据量的多少,索引的创建都有关系。 所以没有什么充分理由说哪个效率更高
iamltd 2008-03-20
  • 打赏
  • 举报
回复
Select * from (Select * from A where A.Fnumber like 'AA%')
left ouer join B on A.Fguid= B.FPID

很简单的例子,如果A的fguid和b的fpid有外键,或者a有(fguid,fnumber)的索引,第二个会快很多
同样,如果a的索引是(fnumber),第一个更快

一般来说很难在写SQL的时候记得清每个表怎么设计的,建议不要写成第一句。
写第二句让SQL去决定选哪种方式要好的多。
you_tube 2008-03-20
  • 打赏
  • 举报
回复
第二个效率不高
zhang_yugang 2008-03-20
  • 打赏
  • 举报
回复
对阿第一句明显没第二句好,并且在where里面写条件不容易取到自己不想得到的那些数据。
BILearner 2008-03-19
  • 打赏
  • 举报
回复
不建议用LIKE,用LIKE连索引都用不上!
kook_tian 2008-03-19
  • 打赏
  • 举报
回复
还是第二句比较合理,第一句多了个没必要的子查询。效率和可读性都没第二个好
bulesky_xshp 2008-03-19
  • 打赏
  • 举报
回复
能给个证明的例子吗?还是以后再自己注意些啊。。
-狙击手- 2008-03-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 iamltd 的回复:]
不能直接说哪个快,SQL 会按成本分析.
通常建议写成第二句,让SQL 去判断到底该如何执行
[/Quote]
iamltd 2008-03-19
  • 打赏
  • 举报
回复
不能直接说哪个快,SQL 会按成本分析.
第一句直接决定了SQL 会先把从A取结果集再和Bjoin.
而第二句就不一定了.可能会先join再取where.

通常建议写成第二句,让SQL 去判断到底该如何执行
tcxx2008 2008-03-19
  • 打赏
  • 举报
回复
嵌套的sql感觉就挺不爽的
bulesky_xshp 2008-03-19
  • 打赏
  • 举报
回复
Sql会自动优化吗?
假如说A500条
没有条件过虑(条件放在后面)是用500条去链接吗?
如果过虑了就只有10条,那是用10条链接
parss 2008-03-19
  • 打赏
  • 举报
回复
有差别
第一句SQL明显效率没第二句高。
dawugui 2008-03-19
  • 打赏
  • 举报
回复
Select * from A
left outer join B
on A.FGUID = B.FPID
where A.Fnumber like 'AA%'

这个快.
-狙击手- 2008-03-19
  • 打赏
  • 举报
回复
差不多

34,838

社区成员

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

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