首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求代码优化.下述代码执行时间超长.解决思路

2012-04-01 
求代码优化...下述代码执行时间超长.SQL codeselect * from(select 区域,购货单位名称,订单ID, 配送单号

求代码优化...下述代码执行时间超长.

SQL code
select * from(select 区域,购货单位名称,订单ID,'' 配送单号,产品名称,件数,'0'配送件数,'0' 出库件数,''出库单号,出货仓库,订单日期,''出库日期from 订单表  where 订单id not in (select distinct 订单ID from 出库表)union select b.区域,b.购货单位名称,b.订单ID,c.配送单号,b.产品名称,b.件数,c.配送件数,isnull(c.出库件数,b.出库件数)出库件数,isnull(c.出库单号,b.出库单号)出库单号,isnull(b.出货仓库,c.出货仓库)出货仓库,b.订单日期,isnull (b.出库日期, c.出库日期)出库日期from(select a.区域,a.购货单位名称,a.订单ID,''配送单号,a.产品名称,a.件数,'0'配送件数,c. 出库件数,isnull(c.出货仓库,a.出货仓库)出货仓库,c.出库单号,a.订单日期,c.出库日期 from(select 区域,购货单位名称,订单ID,产品名称,件数,订单日期,出货仓库 from 订单表 )a full  join(select 订单ID,配送单号,产品名称,件数 出库件数,出货仓库,出库单号,出库日期 from 出库表 where 配送单号 is null)c  on a.订单ID=c.订单ID AND a.产品名称=c.产品名称 )bfull join(select a.区域,a.购货单位名称,a.订单ID,s.配送单号,a.产品名称,a.件数,s.配送件数,s.出库件数,s.出货仓库,s.出库单号,a.订单日期,s.出库日期 from(select 区域,购货单位名称,订单ID,产品名称,件数,订单日期,出货仓库 from 订单表)a full  join(select 区域,购货单位名称,订单ID,配送单号,产品名称,件数,配送件数,出库件数,出货仓库,出库单号,订单日期,出库日期 from(select a.区域,a.购货单位名称,a.订单ID,a.产品名称,a.件数,c.配送单号,b. 件数 配送件数,c.出库件数,isnull (b.起点,c.出货仓库)出货仓库,c.出库单号,c.出库日期,a.订单日期  from(select 区域,购货单位名称,订单ID,产品名称,件数,订单日期,出货仓库 from 订单表)a  full  join 配送表 b on a.订单ID=b.订单ID AND a.产品名称=b.产品名称 full  join (select 订单ID,配送单号,产品名称,件数 出库件数,出货仓库,出库单号,出库日期 from 出库表 )c on a.订单ID=c.订单ID AND a.产品名称=c.产品名称 and isnull(b.配送单号,'')= isnull(c.配送单号,'')and isnull (b.起点,'')=isnull (c.出货仓库,''))b)son  a.订单ID=s.订单ID AND a.产品名称=s.产品名称 )c  on b.订单ID=c.订单ID AND b.产品名称=c.产品名称)dwhere 订单日期 between '2012-02-01' and '2012-02-04'


[解决办法]
SQL code
视图 索引 等高手...
[解决办法]
貌似一共就 订单表,出库表,配送表 三个表吧?

这是在做什么?嵌套来嵌套去的我都看晕了
[解决办法]
SQL code
SELECT    区域 ,                    购货单位名称 ,                    订单ID ,                    '' 配送单号 ,                    产品名称 ,                    件数 ,                    '0' 配送件数 ,                    '0' 出库件数 ,                    '' 出库单号 ,                    出货仓库 ,                    订单日期 ,                    '' 出库日期          FROM      订单表          WHERE     订单id NOT IN ( SELECT DISTINCT                                            订单ID                                  FROM      出库表 )
[解决办法]
有些嵌套是不是多余了?
[解决办法]
SQL code
select * from 订单表 a full join 出库表 b on a.关系字段=b.关系字段 --and 其他关联字段full join 配送表 c on a.关系字段=c.关系字段 --and 其他关联字段--where 把abc的所有条件都放到这里
[解决办法]
code=SQL]那就分开来,用临时Table。一层一层的写出来。
insert into #table1
select 区域,购货单位名称,订单ID,'' 配送单号,产品名称,件数,'0'配送件数,'0' 出库件数,''出库单号,出货仓库,订单日期,''出库日期
from 订单表 where 订单id not in (select distinct 订单ID from 出库表)
......[[/code]
[解决办法]
直接给出表结构和部分数据,以及需要的结果。不然这个代码看的很累啊。
[解决办法]
创建临时表吧 看着很累
[解决办法]
你给出表结构的定义和说明吧,真还没搞清楚你要干什么,直觉是你对数据库设计的四大准则的理解有偏差、对应用没搞清楚,不会有表需要这么来用的。
[解决办法]
探讨
SQL code


select * from
(
select 区域,购货单位名称,订单ID,'' 配送单号,产品名称,件数,'0'配送件数,'0' 出库件数,''出库单号,出货仓库,订单日期,''出库日期
from 订单表 where 订单id not in (select distinct 订单ID from 出库表)



union
select b.区域,b……

[解决办法]

探讨
....不行啊.

[解决办法]
日期条件移到内部。
[解决办法]
将子查询全部拆解成临时表,不要嵌套在里面呗。
NOT IN 的形式 改成 NOT EXISTS 的形式。
只知道这么点。
[解决办法]


不懂,好晕
[解决办法]
建议将所有括号中的select变成insert into temp_tb select ...
避免嵌套子查询过多
[解决办法]
看晕了哦...

热点排行
Bad Request.