【发布时间】:2015-11-24 16:31:47
【问题描述】:
我正在尝试改进在 sybase sql Anywhere 5.5 中进行的 sql 查询(我知道它很旧,但这是我的任务,升级 sybase 版本目前不是一个选项)
select
sum(pd.tax) as totaltax1,sum(pd.tax2) as totaltax2,sum(pd.tax3) as totaltax3,
sum(pd.price) as totalttc,
sum(case when pd.tax<>0 then pd.taxex else 0 end) as tax1able,
sum(case when pd.tax2<>0 then pd.taxex else 0 end) as tax2able,
sum(case when pd.tax3<>0 then pd.taxex else 0 end) as tax3able,
sum(case when pd.tax+pd.tax2+pd.tax3=0 then pd.taxex else 0 end) as nontaxable,
isnull(ra.stax1able,'') as stax1able,isnull(ra.stax1,'') as stax1,
isnull(ra.stax2able,'') as stax2able,isnull(ra.stax2,'') as stax2,
isnull(ra.stax3able,'') as stax3able,isnull(ra.stax3,'') as stax3,
isnull(ra.snontaxable,'') as snontaxable,
isnull(ra.costcenterid,0) as costcenterid,isnull(ra.depcode,0) as depcode,isnull(ra.debitcoa,'') as debitcoa
from("dba".salesheader as ph join
"dba".salesdetail as pd on ph.transact=pd.transact and ph.branchid=pd.branchid) left outer join
"dba".members as m on ph.memcode=m.id left outer join
"dba".accounting_settings as ra on ra."type"=4 and ra.branchid=1
where ph.branchid=1 and ph.opendate=20150808 and ph.amount=ph.paid and(ph.memcode=0 or m.forceexport=0)
group by ra.stax1able,ra.stax1,ra.stax2able,ra.stax2,ra.stax3able,ra.stax3,ra.snontaxable,ra.costcenterid,ra.depcode,ra.debitcoa
表格数据:
- salesheader 只有:327,285 条记录
- salesdetail 只有:1,017,513 条记录
- 成员只有:11,785 条记录
- accounting_settings 只有:13 条记录
上面的查询需要 7 到 8 秒,这是巨大的!有关改进查询的任何提示?
附:所有连接列都有索引(ph.transact、pd.transact、ph.branchid、pd.branchid、ph.memcode、m.id、ra.type、ra.branchid) 此外,where 子句中的所有过滤列都有索引(ph.opendate、ph.amount、ph.paid、m.forceexport)
我尝试过的事情:
- 按列添加组的索引(ra.stax1able、ra.stax1、ra.stax2able、ra.stax2、ra.stax3able、ra.stax3、ra.snontaxable、ra.costcenterid、ra.depcode、ra.debitcoa )
- 为汇总字段添加索引(pd.tax、pd.tax2、pd.tax3、pd.taxex)
- 使用不带 where 部分的 sql 创建视图,然后运行视图
- 创建一个以 opendate 和 branchid 作为参数的存储过程
这些更改均未影响性能(仍需要 7-8 秒)
我该怎么办?
【问题讨论】:
-
sybase Central 中没有 5.5 版的查询计划
-
从此处的文档中查看 GRAPHICAL_PLAN 函数信息:infocenter.sybase.com/archive/topic/…
-
@MichaelGardner 此文档适用于 sybase 9 .. sybase 5 中没有 graphics_plan ..
标签: tsql sybase sybase-asa