查询速度慢的很,都全部视图查询了,还是慢!

weijiawei1130 2009-02-23 03:55:20
SELECT v_viem_bmzecx.fyysbmzeid,
v_viem_bmzecx.ysnd,
v_viem_bmzecx.xmid,
v_viem_bmzecx.ysname,
v_viem_bmzecx.csname,
v_viem_bmzecx.kzbs,
v_viem_bmzecx.ys_deptid,
v_viem_bmzecx.deptwz,
v_viem_bmzecx.deptname,
v_viem_bmzecx.zemoney,
v_viem_bmzecx.zjmoney ,

( SELECT sum( v_xzy_ysmx.zcmoney )
FROM v_xzy_ysmx
WHERE ( v_xzy_ysmx.zctime between :ls_start and :ls_end ) AND
( v_xzy_ysmx.ys_deptid = v_viem_bmzecx.ys_deptid ) AND
( substring(v_xzy_ysmx.xmid,1,6) = substring(v_viem_bmzecx.xmid,1,6) )
) as ysmoney,

( SELECT sum( v_xsy_ysmx.zcmoney )
FROM v_xsy_ysmx
WHERE ( v_xsy_ysmx.zctime between :ls_start and :ls_end ) AND
( v_xsy_ysmx.ys_deptid = v_viem_bmzecx.ys_deptid ) AND
( substring(v_xsy_ysmx.xmid,1,6) = substring(v_viem_bmzecx.xmid,1,6) )
) as zysmoney,

( SELECT sum( v_xzy_ysmx.zcmoney )
FROM v_xzy_ysmx
WHERE ( v_xzy_ysmx.zctime between :ls_start and :ls_end ) AND
( v_xzy_ysmx.ys_deptid = v_viem_bmzecx.ys_deptid ) AND
( v_xzy_ysmx.xmid = v_viem_bmzecx.xmid )
) as z_ysmoney,

( SELECT sum( v_xsy_ysmx.zcmoney )
FROM v_xsy_ysmx
WHERE ( v_xsy_ysmx.zctime between :ls_start and :ls_end ) AND
( v_xsy_ysmx.ys_deptid = v_viem_bmzecx.ys_deptid ) AND
( v_xsy_ysmx.xmid = v_viem_bmzecx.xmid )
) as z_zysmoney

FROM v_viem_bmzecx
WHERE v_viem_bmzecx.ysnd = :ls_ysnd and v_viem_bmzecx.ys_deptid = :ls_ysdeptid

麻烦看看代码那里要改进?
谢谢了
...全文
184 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
seven2015 2009-03-02
  • 打赏
  • 举报
回复
存储过程...
softqiu 2009-03-02
  • 打赏
  • 举报
回复
建个存储过程,先把5个select用到的结果都查询到临时表中,然后把这5张表和成一张,那样速度就快多了

weijiawei1130 2009-03-02
  • 打赏
  • 举报
回复
高手们能给点例子么?
雾水了....一头
eviler 2009-02-26
  • 打赏
  • 举报
回复
sql书写的就有问题 ,一下包含了那么多查询 ,且结果是一个 ,但是在查询的过程中每次都要去执行一下 ,肯定慢的很了
l_chlmh 2009-02-25
  • 打赏
  • 举报
回复
数据量是否很大呢,如果代码上不行,还可考虑一下服务器的问题,弄斧了.
hxbkkk 2009-02-24
  • 打赏
  • 举报
回复
视图并不能真正的提高速度
eviler 2009-02-24
  • 打赏
  • 举报
回复
使用存储过程就可以了 ,返回结果集
hcw_peter 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 weijiawei1130 的回复:]
hcw_peter
忘记说了sybase的数据库没有left....
:ls_ysdeptid
这个是数据窗口的行,要取 v_viem_bmzecx.ys_deptid 的值....
[/Quote]

Sorry,我不清楚你用的是sybase数据库,我還以為你用的是MSSQL呢!!!

那就多考慮索引吧!
Chenghj 2009-02-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 Chenghj 的回复:]
给数据库中相应的数据表的查询条件项作索引,速度将会提高几十倍
[/Quote]
Chenghj 2009-02-24
  • 打赏
  • 举报
回复
给数据库中相应的数据表的查询项作索引,速度将会提高几十倍
gdstx 2009-02-23
  • 打赏
  • 举报
回复
SQL语句改成左连接,再有使用视图当然慢
weijiawei1130 2009-02-23
  • 打赏
  • 举报
回复
hcw_peter
忘记说了sybase的数据库没有left....
:ls_ysdeptid
这个是数据窗口的行,要取 v_viem_bmzecx.ys_deptid 的值....
hcw_peter 2009-02-23
  • 打赏
  • 举报
回复
SELECT v_viem_bmzecx.fyysbmzeid,
v_viem_bmzecx.ysnd,
v_viem_bmzecx.xmid,
v_viem_bmzecx.ysname,
v_viem_bmzecx.csname,
v_viem_bmzecx.kzbs,
v_viem_bmzecx.ys_deptid,
v_viem_bmzecx.deptwz,
v_viem_bmzecx.deptname,
v_viem_bmzecx.zemoney,
v_viem_bmzecx.zjmoney ,

( SELECT sum( v_xzy_ysmx.zcmoney )
FROM v_xzy_ysmx
WHERE ( v_xzy_ysmx.zctime between :ls_start and :ls_end ) AND
( v_xzy_ysmx.ys_deptid = :ls_ysdeptid ) AND
( left(v_xzy_ysmx.xmid,6) = left(v_viem_bmzecx.xmid,6) )
) as ysmoney,

( SELECT sum( v_xsy_ysmx.zcmoney )
FROM v_xsy_ysmx
WHERE ( v_xsy_ysmx.zctime between :ls_start and :ls_end ) AND
( v_xsy_ysmx.ys_deptid = :ls_ysdeptid ) AND
( left(v_xsy_ysmx.xmid,6) = left(v_viem_bmzecx.xmid,6) )
) as zysmoney,

( SELECT sum( v_xzy_ysmx.zcmoney )
FROM v_xzy_ysmx
WHERE ( v_xzy_ysmx.zctime between :ls_start and :ls_end ) AND
( v_xzy_ysmx.ys_deptid = :ls_ysdeptid ) AND
( v_xzy_ysmx.xmid = v_viem_bmzecx.xmid )
) as z_ysmoney,

( SELECT sum( v_xsy_ysmx.zcmoney )
FROM v_xsy_ysmx
WHERE ( v_xsy_ysmx.zctime between :ls_start and :ls_end ) AND
( v_xsy_ysmx.ys_deptid = :ls_ysdeptid ) AND
( v_xsy_ysmx.xmid = v_viem_bmzecx.xmid )
) as z_zysmoney

FROM v_viem_bmzecx
WHERE v_viem_bmzecx.ysnd = :ls_ysnd and v_viem_bmzecx.ys_deptid = :ls_ysdeptid
weijiawei1130 2009-02-23
  • 打赏
  • 举报
回复
eviler
数据窗口里面的不会写多个变量...请教一下
写个例子就行
eviler 2009-02-23
  • 打赏
  • 举报
回复
把 ( SELECT sum( v_xzy_ysmx.zcmoney )
FROM v_xzy_ysmx
WHERE ( v_xzy_ysmx.zctime between :ls_start and :ls_end ) AND
( v_xzy_ysmx.ys_deptid = v_viem_bmzecx.ys_deptid ) AND
( substring(v_xzy_ysmx.xmid,1,6) = substring(v_viem_bmzecx.xmid,1,6) )
) as ysmoney,

( SELECT sum( v_xsy_ysmx.zcmoney )
FROM v_xsy_ysmx
WHERE ( v_xsy_ysmx.zctime between :ls_start and :ls_end ) AND
( v_xsy_ysmx.ys_deptid = v_viem_bmzecx.ys_deptid ) AND
( substring(v_xsy_ysmx.xmid,1,6) = substring(v_viem_bmzecx.xmid,1,6) )
) as zysmoney,

( SELECT sum( v_xzy_ysmx.zcmoney )
FROM v_xzy_ysmx
WHERE ( v_xzy_ysmx.zctime between :ls_start and :ls_end ) AND
( v_xzy_ysmx.ys_deptid = v_viem_bmzecx.ys_deptid ) AND
( v_xzy_ysmx.xmid = v_viem_bmzecx.xmid )
) as z_ysmoney,

( SELECT sum( v_xsy_ysmx.zcmoney )
FROM v_xsy_ysmx
WHERE ( v_xsy_ysmx.zctime between :ls_start and :ls_end ) AND
( v_xsy_ysmx.ys_deptid = v_viem_bmzecx.ys_deptid ) AND
( v_xsy_ysmx.xmid = v_viem_bmzecx.xmid )
) as z_zysmoney
这几个写成一个 sql ,insert into 到4 个变量中

然后

SELECT v_viem_bmzecx.fyysbmzeid,
v_viem_bmzecx.ysnd,
v_viem_bmzecx.xmid,
v_viem_bmzecx.ysname,
v_viem_bmzecx.csname,
v_viem_bmzecx.kzbs,
v_viem_bmzecx.ys_deptid,
v_viem_bmzecx.deptwz,
v_viem_bmzecx.deptname,
v_viem_bmzecx.zemoney,
v_viem_bmzecx.zjmoney ,
ysmoney, -- 这四个就是变量
zysmoney,
z_ysmoney,
z_zysmoney
FROM v_viem_bmzecx
WHERE v_viem_bmzecx.ysnd = :ls_ysnd and v_viem_bmzecx.ys_deptid = :ls_ysdeptid

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧