SQL server SQL语句性能差的例子

获得积分
资料库会员登录
搜索: [高级搜索]
下载首页 | 资源分类 | 下载排行
您的位置: 首页 > 信息化技术 > MSSQL
 
分类导航
下载排行
最新资源
SQL server SQL语句性能差的例子
资源大小:26.69 KB 资源类型:文档
下载积分: 0
更多
-->
下载统计:总下载:0,本月下载:0,本周下载:0,今日下载:0
发表评论 错误报告 加入收藏夹
资源介绍
()where 中很多or ,会导致性能非常差,
这样的语句,程序会按blh,cardno,patid,tjbh,一遍遍找数据。应当改为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   
/**********   
[版本号]4.0.0.0.0   
[创建时间]2006.9.25   
[作者] ziyun     
[版权] Copyright ? 2004-2004上海金仕达-卫宁医疗信息技术有限公司   
[描述]门诊医生站主界面医生信息显示内容   
[功能说明]   
门诊医生站主界面医生信息显示内容   
[参数说明]   
@Ysdm  ut_czyh, --医生代码     
@cxrq  ut_rq16, --查询日期   
@beginrq ut_rq16, --开始时间   
@endrq  ut_rq16  --结束时间   
[返回值]   
[结果集、排序]   
[调用的sp]   
[调用实例]   
[修改历史]   
**********/   
  
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)这里如果会取出多条记录。这样@ghlb不是会多赋值, 是不是可以加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)这里如果会取出多条记录。这样@ghlb不是会多赋值, 是不是可以加top 1。

   
declare  @strsql varchar(1000),   
@zrc int,@zje ut_money,@wjz int   
下载地址
 下载地址1
按字母检索

下载须知:
大部份资源无需注册即可下载
需要积分的资源要在会员中心注册会员并用 积分体系中提示的方法赚取积分才能下载。

免责声明:
所有资源只能用于参考学习,不能用于任何商业用途,否则后果自负!