欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

查询突然变慢,求好手看看

更新时间: 2014-01-05 02:18:07 责任编辑: Author_N1

 

查询突然变慢,求高手看看


sql server2000 fact_pmrelate 表删除后,重新从sql 2005 fact_pmrelate导入数据800W条记录,重新建立主键(FPID,FMID,OrgNo)复合主键,及索引index_define_time(define_tie),index_define_by(define_by),跟原来表一样,但查询变慢了,现在需要三四分钟,原来只要十秒,求高手看看,不知何故

后又用DBCC reindex(fact_pmrelate,'','0')  以及更新该表统计信息,都没效果,另Import_Spread_Pmrelate 没有主键,fpid为非空。

下面语句变慢
select fpid,fmid,-8 info_type,
define_time
  from Import_Spread_Pmrelate e
 where not exists (select 1 from fact_pmrelate t where t.fpid = e.fpid) 
group by fpid,fmid,define_time

--参考方法--

-- 建议:
-- 1.在fact_pmrelate表fpid字段上建索引.
create index ix_fact_pmrelate_fpid on fact_pmrelate(fpid)

-- 2.在Import_Spread_Pmrelate表fpid字段上建索引.
create index ix_Import_Spread_Pmrelate_fpid on Import_Spread_Pmrelate(fpid)

-- 3.查询语句修改为如下试试.
select e.fpid,e.fmid,-8 'info_type',e.define_time
 from Import_Spread_Pmrelate e
 left join fact_pmrelate t on e.fpid=t.fpid
 where t.fpid is null
 group by e.fpid,e.fmid,e.define_time

--参考方法--
引用:
楼上的方法有效,但fact_pmrelate是大表,需要经常写入,建立索引对写的速度可能有影响。能否解释下变慢的原因,因为表的结构都一样,只是重新建立了。

1、建索引对写入的确有点影响,不过只对insert into xxx select xxxx这种形式,对于简单的INSERT into values基本上没影响。
2、如果缺少有效的索引,优化器选择扫描操作,当表越来越大,扫描所需的开销也越来越大,当达到一个临界值的时候,可能就会导致整体性能的降低。
3、除了索引,碎片问题也是个需要考虑的问题,另外NOT EXISTS不是高效的写法。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:18:07
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/8219/
本文WWW.DOC100.NET DOC100.NET版权所有。