日期:2014-05-16  浏览次数:20586 次

心里没底,总觉得这样写sql语句不规范,数据库大了会很慢,请各位爷看看。

use gysys
       select a.考核序号,a.录入时间,
                  录入人=(select 姓名 from 系统数据_员工信息 where 员工代码=a.录入人),
                  a.考核时间,a.检查方式, 
                  被考核人=(select 姓名 from 系统数据_员工信息 where 员工代码=a.被考核人),
                  考核人=(select 姓名 from 系统数据_员工信息 where 员工代码=a.考核人), 
                  a.绩效类别,指标名称=(select 指标名称 from 绩效管理_考核指标 where 指标序号=a.指标项) ,
                  a.指标项, 
                  绩效得分=(select 分数 from 绩效管理_考核指标 where 指标序号=a.指标项), 
                  a.状态,a.详细内容,
                  指标说明=(select 指标说明 from 绩效管理_考核指标 where 指标序号=a.指标项) 
                  from 绩效管理_考核列表 a 
                  inner join 绩效管理_抽查列表 c
                  on a.考核序号=c.考核序号 
         where c.目录序号=@目录序号
                  order by a.考核时间

------解决方案--------------------
建议:
 1.将子查询变为inner join.
 2.绩效管理_考核列表.考核序号上应有索引.
 3.绩效管理_抽查列表.考核序号,目录序号上应有索引.
 4.表名之后应可加(nolock),避免锁阻塞.

------解决方案--------------------


use gysys
go

SELECT a.考核序号,a.录入时间,
                  录入人=y.姓名,
                  a.考核时间,a.检查方式, 
                  被考核人=yb.姓名,
                  考核人=yk.姓名, 
                  a.绩效类别,指标名称=j.指标名称,
                  a.指标项, 
                  绩效得分=j.分数, 
                  a.状态,a.详细内容,
                  指标说明=j.指标说明  
     &n