• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

这样的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在执行时会有什么差异吗?
...全文
69 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
差不多
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-19 03:54
社区公告
暂无公告