关于优化查询的问题。

hiblackman 2008-03-12 09:51:58
表1-供应商 表2-零件 表三-供应关系

表1:S
列:snum,sname,city (供应商编号,名称,所在城市)

表2:P
列:pnum,pname,weight,size(零件编号,名称,重量 尺寸)

表3:SP
列:snum,pnum,dept,quan(供应商编号,零件编号,使用部门,数量)

要查询,在'济南'供应'2cm轴承'数量大于'10000'个的'供应商名称'。
给出的查询语句是:
select sname from s,p,sp where s.snum=sp.snum and sp.pnum=p.pnum and s.city='济南' and p.pname='2cm轴承' and

sp.quan>10000;

要求从新写一条优化过的查询语句,使系统计算量减少,查询速度提高。
-----------------------------------------------

按照我刚刚学到的那点内容 我的思路是

先分别在三张表中查出 满足( 供货数量大于10000的供应商编号,所在城市='济南',零件名称='2cm轴承')条件的记录,

然后用这些结果做连接查询 找出 满足 s.snum=sp.snum and sp.pnum=p.pnum 的记录

因为原来的查询是直接进行三表连接 然后在结果中选出满足条件的行 笛卡尔乘积的计算量一定比 用 筛选后的结果进行连

接查询的计算量要大的多。

。。。

可是我不知道该怎么写这条语句 囧


如果把语句改成(只更改了where语句后面条件的顺序):
select sname from s,p,sp where sp.quan>10000 and p.pname='2cm轴承' and s.city='济南' and s.snum=sp.snum and

sp.pnum=p.pnum;
能起到优化的作用吗?

如果不能,应该怎么写这条语句才能起到优化的作用?
...全文
26 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zbc1009 2008-03-12
如果你的逻辑条件没有发生变化,执行的效率是一样的,何况你只是换次序,任何影响都没有。看看执行计划就明白了
回复
hiblackman 2008-03-12
谢谢喽 :)
回复
dawugui 2008-03-12
如果条件一样,更改了没什么变化.

最多是加个(),看谁先计算,谁后计算而已.
回复
hiblackman 2008-03-12
to dawugui:

我知道那条查询语句可以那么写
select sname from s,p,sp where s.snum=sp.snum and sp.pnum=p.pnum and s.city='济南' and p.pname='2cm轴承' and sp.quan> 10000;
我是想问怎么才能优化这条语句

还有想这道这两条语句 系统是否认为是一样的? 计算过程会不会不同?(只更改了where语句后面条件的顺序)
select sname from s,p,sp where s.snum=sp.snum and sp.pnum=p.pnum and s.city='济南' and p.pname='2cm轴承' and sp.quan> 10000;
select sname from s,p,sp where sp.quan> 10000 and p.pname='2cm轴承' and s.city='济南' and s.snum=sp.snum and sp.pnum=p.pnum;

还是感谢您的回复
回复
dawugui 2008-03-12
看了看.

就是你自己的那条语句.

select sname from s,p,sp where s.snum=sp.snum and sp.pnum=p.pnum and s.city='济南' and p.pname='2cm轴承' and sp.quan> 10000; 
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

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