()where 中很多or ,會(huì)導(dǎo)致性能非常差,
這樣的語句,程序會(huì)按blh,cardno,patid,tjbh,一遍遍找數(shù)據(jù)。應(yīng)當(dāng)改為if else
SELECT a.*
FROM TJ_TJRYK a (nolock), SF_BRXXK b (nolock), YY_DQDMK c ,TJ_TJTDK d
where a.patid = b.patid and b.qxdm *= c.id and a.tdxh=d.xh
and (( @codetype =1 and b.blh = @code)
or (@codetype =2 and b.cardno = @code)
or (@codetype in (3,4) and b.patid = @code1)
or (@codetype =6 and a.tjbh = @code)) --add 20070611
order by a.xh desc
(2)subtring和盡量減少sql語句
--exec usp_mz_ys_gdtxs "00","20080903"--【Ztsql】
CREATE proc usp_mz_ys_gdtxs
@ysdm ut_czyh,
@cxrq ut_rq16
as
/**********
[版本號(hào)]4.0.0.0.0
[創(chuàng)建時(shí)間]2006.9.25
[作者] ziyun
[版權(quán)] Copyright ? 2004-2004上海金仕達(dá)-衛(wèi)寧醫(yī)療信息技術(shù)有限公司
[描述]門診醫(yī)生站主界面醫(yī)生信息顯示內(nèi)容
[功能說明]
門診醫(yī)生站主界面醫(yī)生信息顯示內(nèi)容
[參數(shù)說明]
@Ysdm ut_czyh, --醫(yī)生代碼
@cxrq ut_rq16, --查詢?nèi)掌?nbsp;
@beginrq ut_rq16, --開始時(shí)間
@endrq ut_rq16 --結(jié)束時(shí)間
[返回值]
[結(jié)果集、排序]
[調(diào)用的sp]
[調(diào)用實(shí)例]
[修改歷史]
**********/
declare @hour varchar(2),@ghlb ut_bz,@ksdm ut_ksdm
select @hour=convert(varchar(2),getdate(),108)
if @hour<='12'
begin
select @ghlb=ghlb,@ksdm=ksdm from GH_GHZDK a(nolock)
where a.ysdm=@ysdm and a.jlzt=0 and a.fzbz>0 and a.ghrq like substring(@cxrq, 1, 8)+ '%'
and substring(a.ghrq,9,2)<='12'
--agg: (1)substring(a.ghrq,9,2)<='12'的性能是非常差的,在這里a.ghrq like substring(@cxrq, 1, 8)+ '%'
-- and substring(a.ghrq,9,2)<='12' 可以改為a.ghrq>= substring(@cxrq, 1, 8) and a.ghrq<
-- =substring(@cxrq, 1, 8)+’12’and a.ghrq>= substring(@cxrq, 1, 8) and a.ghrq>
-- =substring(@cxrq, 1, 8)+’24’,這樣才可以很好的用到ghrq索引
-- (2)這里如果會(huì)取出多條記錄。這樣@ghlb不是會(huì)多賦值, 是不是可以加top 1。
end
else
begin
select @ghlb=ghlb,@ksdm=ksdm from GH_GHZDK a(nolock)
where a.ysdm=@ysdm and a.jlzt=0 and a.fzbz>0 and a.ghrq like substring(@cxrq, 1, 8)+ '%'
and substring(a.ghrq,9,2)>'12'
end
--agg: substring(a.ghrq,9,2)<='12'的性能是非常差的,在這里a.ghrq like substring(@cxrq, 1, 8)+ '%'
-- and substring(a.ghrq,9,2)<='12' 可以改為a.ghrq>
-- substring(@cxrq, 1, 8)+’12’,這樣才可以很好的用到ghrq索引
-- (2)這里如果會(huì)取出多條記錄。這樣@ghlb不是會(huì)多賦值, 是不是可以加top 1。
declare @strsql varchar(1000),
@zrc int,@zje ut_money,@wjz int
|
|