当前位置: 代码迷 >> Sql Server >> 优化一条sql语句解决办法
  详细解决方案

优化一条sql语句解决办法

热度:98   发布时间:2016-04-27 17:43:27.0
优化一条sql语句
SELECT           *
FROM                   VDISCUSSIONMEETING_PRE
WHERE          
Sys_U_Code   =   '[email protected] '  
OR
(DMP_Type   IN
    (SELECT   DISTINCT   BM_MeetingTypeCode
FROM                     Sys_User_Role
WHERE             Sys_U_Code   =   '[email protected] '   AND   Sys_R_Code   IN   ( '2 ',   '3 ',   '4 ')   AND   DomainShortName   =   'km ')   AND  
(SYS_DEPT_SYS_D_NOSEND   =   'km '  
OR
                            Sys_D_No   =   'km ')   AND   Sys_U_Code   <>   '[email protected] ')
OR
    (DMP_Type   IN
    (SELECT   DISTINCT   BM_MeetingTypeCode
FROM                     Sys_User_Role
WHERE             Sys_U_Code   =   '[email protected] '   AND   Sys_R_Code   IN   ( '2 ',   '3 ',   '4 ')   AND   DomainShortName   =   'sh ')   AND  
    (SYS_DEPT_SYS_D_NOSEND   =   'sh '  
OR
                            Sys_D_No   =   'sh ')   AND   Sys_U_Code   <>   '[email protected] ')
OR
    (DMP_Type   IN
    (SELECT   DISTINCT   BM_MeetingTypeCode
FROM                     Sys_User_Role
WHERE             Sys_U_Code   =   '[email protected] '   AND   Sys_R_Code   IN   ( '2 ',   '3 ',   '4 ')   AND   DomainShortName   =   'bj ')   AND  
    (SYS_DEPT_SYS_D_NOSEND   =   'bj '  
OR
                            Sys_D_No   =   'bj ')   AND   Sys_U_Code   <>   '[email protected] ')
表和字段名字等好多都有点乱,经过好多人的手了,几年前的东西,这个一开始做的时候也不正规。类似于这种sql语句能优化吗?这条语句有个规律可以一直or下去。。各位帮忙,谢谢

------解决方案--------------------
用union 代替 or 如

SELECT *
FROM VDISCUSSIONMEETING_PRE
WHERE
Sys_U_Code = '[email protected] '
OR
(DMP_Type IN
(SELECT DISTINCT BM_MeetingTypeCode
FROM Sys_User_Role
WHERE Sys_U_Code = '[email protected] ' AND Sys_R_Code IN ( '2 ', '3 ', '4 ') AND DomainShortName = 'km ') AND
(SYS_DEPT_SYS_D_NOSEND = 'km '

可改为

SELECT * FROM VDISCUSSIONMEETING_PRE WHERE Sys_U_Code = '[email protected] '
union
SELECT * FROM VDISCUSSIONMEETING_PRE WHERE (DMP_Type IN (SELECT DISTINCT BM_MeetingTypeCode FROM Sys_User_Role WHERE Sys_U_Code = '[email protected] ' AND Sys_R_Code IN ( '2 ', '3 ', '4 ') AND DomainShortName = 'km ') AND SYS_DEPT_SYS_D_NOSEND = 'km '

------解决方案--------------------
  相关解决方案