积极答复者
优化2

问题
-
看看这个语句的优化? 能不能用 NOT EXISTS 替代 not in LifeMir.dbo.CMSUSREL A (CRCO— 主健) LifeMir.dbo.NBSPCNTR (PCCO — 主健) 两张表关联 PCUSR6 like 'C__9%' and (PCAPPY*10000+PCAPPM*100+PCAPPD)=CONVERT(varchar(12) , getdate(), 112)); 可不可以用试图替换: 大家帮优化一下 -------------------------------------------------------------------------- select Distinct CRCTL1 as PolicyID from LifeMir.dbo.CMSUSREL A left join LifeMir.dbo.NBSPCNTR B On A.CRCTL1=B.PCPOLN where (CRALPH ='OW1' or (CRALPH='INS' and CRCTL2=0)) AND CRCTL1 NOT IN select PCPOLN from LifeMir.dbo.NBSPCNTR where PCUSR6 like 'C__9%' and (PCAPPY*10000+PCAPPM*100+PCAPPD)=CONVERT(varchar(12) , getdate(), 112));
答案
-
1. IN 和 exists当然是可以替换的
例子:
select * from dbo.CounterData where counterid IN
(
select counterid from dbo.CounterDetails where objectname='Memory'
)
select * from dbo.CounterData where EXISTS
(
select counterid from dbo.CounterDetails where CounterData.counterid=CounterDetails.counterid and objectname='Memory'
)2. 单句SQL的优化建议
a. sql写法
b. table的index调整
可以通过在查询分析器中打开执行计划,来分析目前sql的cost主要耗用在什么地方, 然后针对性的调优, 调优后,再查看执行计划,进行比较,循环往复。
规则:
a. 执行计划中最好走index
b. 走index的部分,尽量调整为走index seek。
- 已标记为答案 Ai-hua Qiu 2011年4月22日 7:08
全部回复
-
1. IN 和 exists当然是可以替换的
例子:
select * from dbo.CounterData where counterid IN
(
select counterid from dbo.CounterDetails where objectname='Memory'
)
select * from dbo.CounterData where EXISTS
(
select counterid from dbo.CounterDetails where CounterData.counterid=CounterDetails.counterid and objectname='Memory'
)2. 单句SQL的优化建议
a. sql写法
b. table的index调整
可以通过在查询分析器中打开执行计划,来分析目前sql的cost主要耗用在什么地方, 然后针对性的调优, 调优后,再查看执行计划,进行比较,循环往复。
规则:
a. 执行计划中最好走index
b. 走index的部分,尽量调整为走index seek。
- 已标记为答案 Ai-hua Qiu 2011年4月22日 7:08