求sql语句的其它写法! (100分)

  • 主题发起人 主题发起人 ty_unix
  • 开始时间 开始时间
T

ty_unix

Unregistered / Unconfirmed
GUEST, unregistred user!
select rs_tab.rsbh,rs_tab.xm,zhb.zh,gz_bkb.kyf
from gz_bkb,zhb,rs_tab
where rs_tab.rsbh=gz_bkb.rsbh
and rs_tab.rsbh=zhb.rsbh
and rs_tab.dw<>'7000' and rs_tab.dw<>'7100'
and gz_bkb.kyf<>0
and gz_bkb.mm='2002'
and gz_bkb.yy='11'
order by rs_tab.rsbh

要求执行效率高。
 
SELECT rs_tab.rsbh, rs_tab.xm, zhb.zh, gz_bkb.kyf
FROM rs_tab INNER JOIN
zhb ON rs_tab.rsbh = zhb.rsbh CROSS JOIN
gz_bkb
WHERE (rs_tab.rsbh = gz_tab.rsbh) AND (rs_tab.dw <> '7000') AND (rs_tab.dw <> '7100')
AND (gz_bkb.kyf <> 0) AND (gz_bkb.mm = '2002') AND (gz_bkb.yy = '11')
ORDER BY rs_tab.rsbh
 
from有两个表,但where子句中出现4个表,error
如果表名没有写错该sql语句没什么问题
 
flysand:
恭喜你,你已经老了,眼花了!
 
执行效率跟你两个表的索引还有关系。
你可以弄几万条记录,然后将条件变换一下。看看如何组合sql时间最短。
 
to flysand
不好意思是写错了,呵呵,已经改正

to LiZhongYu
sql执行语句不仅和数据量的大小有关系,应该还和语句的书写也有关系,
 
把成立可能性最小的条件放在 and 的最前面。
 
恩,这个会提高查询速度,还有其它方法没有啊
 
把成立可能性最小的条件放在 and 的最前面。
把做JOIN的条件放到最后

select rs_tab.rsbh,rs_tab.xm,zhb.zh,gz_bkb.kyf
from gz_bkb,zhb,rs_tab
where rs_tab.dw<>'7000' and rs_tab.dw<>'7100'
and gz_bkb.kyf<>0
and gz_bkb.mm='2002'
and gz_bkb.yy='11'
and rs_tab.rsbh=gz_bkb.rsbh
and rs_tab.rsbh=zhb.rsbh
order by rs_tab.rsbh

 
据说,把不等于改成> or <也会提高速度
 
索引
先检测出最严格限制条件的,就是说返回的数据最少的。
看看是不是经常这样select,如是,就用prepare
 
几个建议:
1、同意使用索引;
2、不要直接使用常量,而是把常量直接放在数据库里。不如说事先声明变量V_YY:='11';
3、使用提示改变执行计划;
4、将记录数量少地表设置为HASH_JOIN直接放在内存种以散列方式连接;
5、如果能将排序操作放在本地上执行更好,就是说去掉ORDER BY 语句,把排序放在客户端
执行。
6、如果不是实时地需要,用临时表存储。
 
多人接受答案了。
 
后退
顶部