【问题标题】:How to minimize the usage of these subqueries and increase the performance?如何最大限度地减少这些子查询的使用并提高性能?
【发布时间】:2015-09-04 17:33:53
【问题描述】:

只是子查询的 Where 子句 (ColumnNm = hierarchylvl#) 发生了变化。让我知道提高查询性能的任何方法。 有什么方法可以重写子查询?加入?使用任何其他功能?

select * from
(select
(SELECT TOP 1 itmtxt FROM TM.Code  WHERE Catcd = (select Catcd from TM.ClientHierarchy where OBJID='system' and TableNm='resume1' and ColumnNm ='hierarchylvl0' and delflg = 0)  and delflg = 0 AND LngCd IN (0,-1) AND ItmCd = r1.hierarchylvl0) AS hierarchylvl0txt,

(SELECT TOP 1 itmtxt FROM TM.Code  WHERE Catcd = (select Catcd from TM.ClientHierarchy where OBJID='system' and TableNm='resume1' and ColumnNm ='hierarchylvl1' and delflg = 0)  and delflg = 0 and ItmCd=r1.HierarchyLvl1 AND LngCd IN (0,-1)) AS hierarchylvl1txt,

(SELECT TOP 1 itmtxt FROM TM.Code  WHERE Catcd = (select Catcd from TM.ClientHierarchy where OBJID='system' and TableNm='resume1' and ColumnNm ='hierarchylvl2' and delflg = 0) AND lngcd IN (0,-1) and delflg = 0 and ItmCd=r1.HierarchyLvl2) AS hierarchylvl2txt,

(SELECT TOP 1 itmtxt FROM TM.Code  WHERE Catcd = (select Catcd from TM.ClientHierarchy where OBJID='system' and TableNm='resume1' and ColumnNm ='hierarchylvl3' and delflg = 0) AND lngcd IN (0,-1) and delflg = 0 and ItmCd=r1.HierarchyLvl3) AS hierarchylvl3txt,

(SELECT TOP 1 itmtxt FROM TM.Code  WHERE Catcd = (select Catcd from TM.ClientHierarchy where OBJID='system' and TableNm='resume1' and ColumnNm ='hierarchylvl4' and delflg = 0) AND lngcd IN (0,-1) and delflg = 0 and ItmCd=r1.HierarchyLvl4) AS hierarchylvl4txt,

(SELECT TOP 1 itmtxt FROM TM.Code  WHERE Catcd = (select Catcd from TM.ClientHierarchy where OBJID='system' and TableNm='resume1' and ColumnNm ='hierarchylvl5' and delflg = 0) AND lngcd IN (0,-1) and delflg = 0 and ItmCd=r1.HierarchyLvl5) AS hierarchylvl5txt,

(SELECT TOP 1 itmtxt FROM TM.Code  WHERE Catcd = (select Catcd from TM.ClientHierarchy where OBJID='system' and TableNm='resume1' and ColumnNm ='hierarchylvl6' and delflg = 0) AND lngcd IN (0,-1) and delflg = 0 and ItmCd=r1.HierarchyLvl6) AS hierarchylvl6txt,

(SELECT TOP 1 itmtxt FROM TM.Code  WHERE Catcd = (select Catcd from TM.ClientHierarchy where OBJID='system' and TableNm='resume1' and ColumnNm ='hierarchylvl7' and delflg = 0) AND lngcd IN (0,-1) and delflg = 0 and ItmCd=r1.HierarchyLvl7) AS hierarchylvl7txt,

(SELECT TOP 1  itmtxt FROM TM.Code  WHERE Catcd = (select Catcd from TM.ClientHierarchy where OBJID='system' and TableNm='resume1' and ColumnNm ='hierarchylvl8' and delflg = 0) AND lngcd IN (0,-1) and delflg = 0 and ItmCd=r1.HierarchyLvl8) AS hierarchylvl8txt,

(SELECT TOP 1 itmtxt FROM TM.Code  WHERE Catcd = (select Catcd from TM.ClientHierarchy where OBJID='system' and TableNm='resume1' and ColumnNm ='hierarchylvl9' and delflg = 0)  and delflg = 0 and ItmCd=r1.HierarchyLvl9 AND LngCd IN (0,-1)) AS hierarchylvl9txt,

    sr.rsrcnum, sr.fllnm, isnull(mgr.fllnm,'') as mgrnm, d.actid, d.goaldesctxt ,
    d.cmpltstscd,
    (select TOP 1 itmtxt from tm.Code where catcd = '12103' and itmcd = d.cmpltstscd and lngcd = 0 and delflg = 0) as Status,
    d.strtdt, d.enddt, dta
from
    TM.matrixgoal d
inner join
    TM.sresource sr on d.rsrcid=sr.rsrcid and sr.delflg=0 and sr.stscd<>1 and sr.rsrcid > 7
left join
    TM.sresource mgr on mgr.rsrcid=sr.mgr1id and mgr.delflg=0 and mgr.stscd<>1
inner join
    TM.resume1 r1 on r1.rsrcid=sr.rsrcid

【问题讨论】:

    标签: mysql sql-server select join


    【解决方案1】:

    您的子查询部分可以使用IN 运算符重写如下

    SELECT TOP 1
      itmtxt
    FROM TM.Code
    WHERE Catcd IN (SELECT
      Catcd
    FROM TM.ClientHierarchy
    WHERE OBJID = 'system'
    AND TableNm = 'resume1'
    AND ColumnNm IN ('hierarchylvl0', 'hierarchylvl1', 'hierarchylvl2', 'hierarchylvl3', 'hierarchylvl4', 'hierarchylvl5',
    'hierarchylvl6', 'hierarchylvl7', 'hierarchylvl8', 'hierarchylvl9')
    AND delflg = 0)
    AND delflg = 0
    AND LngCd IN (0, -1)
    

    【讨论】:

    • 但我想在结果中将每个“hierarchylvl#”显示为单独的列。您提供的查询将所有这些作为单个列提供给我
    猜你喜欢
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多