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