我正在尝试创建视图,但是此视图中的select语句花费的时间超过15秒。如何让它更快。我对该视图的查询如下。
create view Summary as
select distinct A.Process_date,A.SN,A.New,A.Processing,
COUNT(case when B.type='Sold' and A.status='Processing' then 1 end) as Sold,
COUNT(case when B.type='Repaired' and A.status='Processing' then 1 end) as Repaired,
COUNT(case when B.type='Returned' and A.status='Processing' then 1 end) as Returned
from
(select distinct M.Process_date,M.SN,max(P.enter_date) as enter_date,M.status,
COUNT(case when M.status='New' then 1 end) as New,
COUNT(case when M.status='Processing' and P.cn is null then 1 end) as Processing
from DB1.dbo.Item_details M
left outer join DB2.dbo.track_data P on M.SN=P.SN
group by M.Process_date,M.SN,M.status) A
left outer join DB2.dbo.track_data B on A.SN=B.SN
where A.enter_date=B.enter_date or A.enter_date is null
group by A.Process_date,A.New,A.Processing,A.SN
在此视图之后..我选择查询
select distinct process_date,sum(New),sum(Processing),sum(sold),sum(repaired),sum(returned) from Summary where month(process_date)=03 and year(process_date)=2011
请建议我对查询执行哪些更改以更快地执行。
谢谢 ARB
答案 0 :(得分:1)
如果没有看到实际数据和表格结构,很难提供建议。我会重写查询,记住这些原则:
我希望这会有所帮助。
答案 1 :(得分:1)
为了调整数据库查询,除了@Davyd已经列出的内容之外,我还要添加一些项目:
答案 2 :(得分:0)
如果你正在使用Postgresql,我建议你使用像“http://explain.depesz.com/”这样的工具,以便更清楚地看到你的查询的哪个部分很慢。根据您获得的内容,您可以优化索引,也可以重写部分查询。如果您正在使用其他数据库,我确信存在类似的工具。
如果这些想法都没有帮助,最终的解决方案就是创建一个“物化查询”。网上有很多关于此的信息。
祝你好运。