where和join...on的效率问题(10分)

  • 主题发起人 主题发起人 softdog
  • 开始时间 开始时间
S

softdog

Unregistered / Unconfirmed
GUEST, unregistred user!
这两个查询的效率哪个更高一些呢?
1.
select
t1.id, t1.name, t2.address
from t1,t2 where t2.id=t1.id

2.
select
t1.id, t1.name, t2.address
from t1 join j2 on t2.id=t1.id
 
第二个。因为能避免表扫描,结构清晰。
 
可是我用Query Analyzer得出的分析结果却是两个查询一摸一样。
第二种方法的分析结果显示也有Scan Table的,而且耗费55%的时间,和第一种方法一样。
 
To softdog:
请问Query Analyzer是不是DELPHI 自带的啊,还是自己装的
怎么用啊

我想对第一种情况数据库Parse时可能优化过,变成第二种形式吧
 
to xie_p_f: Query Analyzer是SQL Server 7.0自带的查询分析器啊,你没用过啊?
 
to softdog:
你要建索引的呀,否则当然是表扫描,用Query Analyzer的索引分析试试把
 
我将字段添加索引后(t1.id, t2.id),的确不进行Sacn Table了,不过Where字句也不进行
Scan Table了。

还有:
如果给t1.id增加索引,而t2.id没有索引,这时,整个查询就变慢了很多,而且分析结果
中多了一个Sort过程。
如果给t2.id增加索引,而t1.id没有索引,这和t1.id, t2.id都有索引是结果一样。

但是无论如何定义索引,从分析结果看,where字句和join字句的效果是一样的,SQL好像把
Where字句转化为join字句了。

大家继续讨论,Thanks.
 
如果是MSSQL SERVER这两个查询的效率是一样的,其实都是内连接查询。
 
我用INTERBASE 的
两个关联表中大概有1万条记录
用INNER JOIN ON 需要3秒,
而不用索引的话用了30秒,我想效率在数据项多的时候会体现出来。
做一条记录查询的测试好象比例是20MS :200MS

 
多人接受答案了。
 
后退
顶部