那个select更有效率

黄金小瓜 发布于 2011/06/24 11:51
阅读 623
收藏 1

EMP表描述了LOCATION表和CATEGORY 表的交集.

1)SELECT *  
FROM LOCATION L ,  
CATEGORY C,
EMP E  
WHERE E.EMP_NO BETWEEN 1000 AND 2000
AND E.CAT_NO = C.CAT_NO
AND E.LOCN = L.LOCN


2)SELECT *  
FROM EMP E ,
LOCATION L ,  
CATEGORY C
WHERE E.CAT_NO = C.CAT_NO
AND E.LOCN = L.LOCN
AND E.EMP_NO BETWEEN 1000 AND 2000

 

1)比2)更有效...区别不大啊?

 

 

加载中
0
SeekerLee
SeekerLee
不一样的吗
黄金小瓜
黄金小瓜
看书上写 有不一样 效率...
0
笨蛋EGG
笨蛋EGG

这个,,,貌似要看表结构和索引以及查询优化之类的的条件·······比如说相同情况下,用数字做关键字查询貌似比字符串查询快些,索引过的字段查询这个不用说了,貌似mssql服务器会自行对查询条件进行优化,比如说N个条件,会把索引查询条件排在前面……(以上是印象中的记忆,好像有看过类似的达人文章……)

上面两个查询,是不是因为E.EMP_NO BETWEEN 1000 AND 2000先进行的话,已经E表的范围在自身上缩小了,如果先进行其他的两个条件查询,是先进行链接查询,所以会慢,不知道是不是这样理解……

我记得网上有类似的研究文章的,就是说不同的条件顺序的执行效率,上网查查去……记得是有的

G.
G.
这不是你喜爱的Oracle吗? 怎么扯到MSSQL去了?
0
james.xu
james.xu

不一样的地方就是第一个select把限制数据量大小的条件放在第一个了:

E.EMP_NO BETWEEN 1000 AND 2000 
这样sql总体要比较的数据量就小了。

0
freish
freish
不同的数据库是不一样的,还要看数据库执行where条件从左往右还是从右往左,有的数据库会自动优化,无所谓左右
0
dedenj
dedenj

这玩意的原理和写join时把join表的固定条件写到最后一样?

select * from a join b on a.id=b.id where a.name='jj' and b.sex='女'

select * from a join b on a.id=b.id and b.sex='女' where a.name='jj'

0
SeekerLee
SeekerLee
oracle的话应该没区别,CBO很智能的
0
疯狂的艺术家
疯狂的艺术家

主要看过滤的条件,

如果过滤的东西多的话,应该放在后面,因为后面的先执行

所以直接拿出这个sql不能确定哪个快,

如果E.CAT_NO = C.CAT_NO  能过滤掉100条记录

    E.EMP_NO BETWEEN 1000 AND 2000  能过滤掉1000000条记录

那么 第二种 快,反之依然。



0
FaceBook
FaceBook

 

 

 

 

 

0
黄金小瓜
黄金小瓜

引用来自“艺术家”的答案

主要看过滤的条件,

如果过滤的东西多的话,应该放在后面,因为后面的先执行

所以直接拿出这个sql不能确定哪个快,

如果E.CAT_NO = C.CAT_NO  能过滤掉100条记录

    E.EMP_NO BETWEEN 1000 AND 2000  能过滤掉1000000条记录

那么 第二种 快,反之依然。



EMP表描述了LOCATION表和CATEGORY 表的交集.
返回顶部
顶部