求SQL查询语句优化

-Arvin 2017-11-01 02:39:28
SELECT  CgPlanAdjustGUID ,
CgPlanName
FROM cg_CgPlan a
WHERE ( ( ( ISNULL(a.IsProject, 0) = 0 )
AND a.BUGUID IN (
SELECT DISTINCT
bu.BUGUID
FROM myStationUser su
INNER JOIN myStation s ON su.StationGUID = s.StationGUID
INNER JOIN myBusinessUnit bu ON s.CompanyGUID = bu.BUGUID
WHERE su.UserGUID = 'AD942525-768C-4377-AD61-B7518339DAE8'
AND bu.IsCompany = 1 )
)
OR ( ( ISNULL(a.IsProject, 0) = 1 )
AND ( SELECT COUNT(1)
FROM ( SELECT DISTINCT
t.ProjGUID
FROM myStationObject so
INNER JOIN myStationUser su ON so.StationGUID = su.StationGUID
INNER JOIN vcg_FullProjectTree t ON so.ObjectGUID = t.ObjectGUID
WHERE so.ObjectType = 'project'
AND su.UserGUID = 'AD942525-768C-4377-AD61-B7518339DAE8'
AND t.ApplySys LIKE '%,0220,%'
AND a.ProjectGUIDList LIKE '%'
+ CAST(t.ProjGUID AS VARCHAR(36))
+ '%'
) m
) > 0
)
)
AND ( a.ManagerGUID = 'AD942525-768C-4377-AD61-B7518339DAE8'
OR EXISTS ( SELECT 1
FROM Cg_CgSolutionTeam cgst
INNER JOIN Cg_CgSolutionTeamMember cgstm ON cgst.TeamGUID = cgstm.TeamGUID
INNER JOIN MyUserToOrg d ON cgstm.MemberGUID = d.OrgGuid
INNER JOIN cg_CgSolution c ON cgst.CgSolutionGUID = c.CgSolutionGUID
WHERE c.CgPlanAdjustGUID = a.CgPlanAdjustGUID
AND d.UserGuid = 'AD942525-768C-4377-AD61-B7518339DAE8' )
OR EXISTS ( SELECT 1
FROM cg_ProcDataAuthor cpda
INNER JOIN MyUserToOrg mut ON cpda.AuthorGUID = mut.OrgGuid
WHERE cpda.BUGUID = a.BUGUID
AND mut.UserGuid = 'AD942525-768C-4377-AD61-B7518339DAE8' )
)

求SQL优化,单表数据量很少不过万,查询时间30秒。求大神优化最好能在5秒内。
...全文
460 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
-Arvin 2017-11-09
  • 打赏
  • 举报
回复
谢谢两位 结帖
-Arvin 2017-11-09
  • 打赏
  • 举报
回复
引用 4 楼 qq_37170555 的回复:
[quote=引用 3 楼 -Arvin的回复:][quote=引用 1 楼 qq_37170555 的回复:]

SELECT a.CgPlanAdjustGUID,
       a.CgPlanName
FROM   cg_CgPlan a
       INNER JOIN (
                SELECT DISTINCT
                       bu.BUGUID
                FROM   myStationUser su
                       INNER JOIN myStation s
                            ON  su.StationGUID = s.StationGUID
                       INNER JOIN myBusinessUnit bu
                            ON  s.CompanyGUID = bu.BUGUID
                WHERE  su.UserGUID = 'AD942525-768C-4377-AD'
            ) b
            ON  a.BUGUID = b.BUGUID
WHERE  ISNULL(a.IsProject, 0) = 0
       AND (
               a.ManagerGUID = 'AD942525-768C-4377-AD61-B7518339DAE8'
               OR EXISTS (
                      SELECT 1
                      FROM   Cg_CgSolutionTeam cgst
                             INNER     JOIN Cg_CgSolutionTeamMember cgstm
                                  ON  cgst.TeamGUID = cgstm.TeamGUID
                             INNER JOIN MyUserToOrg d
                                  ON  cgstm.MemberGUID = d.OrgGuid
                             INNER JOIN cg_CgSolution c
                                  ON  cgst.CgSolutionGUID = c.CgSolutionGUID
                      WHERE  c.CgPlanAdjustGUID = a.CgPlanAdjustGUID
                             AND d.UserGuid = 
                                 'AD942525-768C-4377-AD61-B7518339DAE8'
                  )
               OR EXISTS (
                      SELECT 1
                      FROM   cg_ProcDataAuthor cpda
                             INNER JOIN MyUserToOrg mut
                                  ON  cpda.AuthorGUID = mut.OrgGuid
                      WHERE  cpda.BUGUID = a.BUGUID
                             AND mut.UserGuid = 
                                 'AD942525-768C-4377-AD61-B7518339DAE8'
                  )
           )
union
SELECT a.CgPlanAdjustGUID,
       a.CgPlanName
FROM   cg_CgPlan a      
WHERE  ISNULL(a.IsProject, 0) = 1 
AND (
  SELECT COUNT(1)
  FROM   (
             SELECT DISTINCT
                    t.ProjGUID
             FROM   myStationObject so
                    INNER JOIN myStationUser su
                         ON  so.StationGUID = su.StationGUID
                    INNER JOIN vcg_FullProjectTree t
                         ON  so.ObjectGUID = t.ObjectGUID
             WHERE  so.ObjectType = 'project'
                    AND su.UserGUID = 
                        'AD942525-768C-4377-AD61-B7518339DAE8'
                    AND t.ApplySys LIKE '%,0220,%'
                    AND a.ProjectGUIDList LIKE '%'
                        + CAST(t.ProjGUID AS VARCHAR(36))
                        + '%'
         ) m
) > 0
AND
(
   a.ManagerGUID = 'AD942525-768C-4377-AD61-B7518339DAE8'
   OR EXISTS (
          SELECT 1
          FROM   Cg_CgSolutionTeam cgst
                 INNER     JOIN Cg_CgSolutionTeamMember cgstm
                      ON  cgst.TeamGUID = cgstm.TeamGUID
                 INNER JOIN MyUserToOrg d
                      ON  cgstm.MemberGUID = d.OrgGuid
                 INNER JOIN cg_CgSolution c
                      ON  cgst.CgSolutionGUID = c.CgSolutionGUID
          WHERE  c.CgPlanAdjustGUID = a.CgPlanAdjustGUID
                 AND d.UserGuid = 
                     'AD942525-768C-4377-AD61-B7518339DAE8'
      )
   OR EXISTS (
          SELECT 1
          FROM   cg_ProcDataAuthor cpda
                 INNER JOIN MyUserToOrg mut
                      ON  cpda.AuthorGUID = mut.OrgGuid
          WHERE  cpda.BUGUID = a.BUGUID
                 AND mut.UserGuid = 
                     'AD942525-768C-4377-AD61-B7518339DAE8'
      )
) 
这样试试看有没有稍微快点,你这什么都没有,就一堆代码,很难优化的,只能看看你语句上有没有优化的余地。索引和逻辑方面根本没有办法优化。
1秒都不到。。。 学习了。[/quote] 没问题了就结贴吧[/quote] 引用错了,哈哈 。是下面个那版主哥的 1秒钟。
听雨停了 2017-11-02
  • 打赏
  • 举报
回复
引用 3 楼 -Arvin的回复:
[quote=引用 1 楼 qq_37170555 的回复:]

SELECT a.CgPlanAdjustGUID,
       a.CgPlanName
FROM   cg_CgPlan a
       INNER JOIN (
                SELECT DISTINCT
                       bu.BUGUID
                FROM   myStationUser su
                       INNER JOIN myStation s
                            ON  su.StationGUID = s.StationGUID
                       INNER JOIN myBusinessUnit bu
                            ON  s.CompanyGUID = bu.BUGUID
                WHERE  su.UserGUID = 'AD942525-768C-4377-AD'
            ) b
            ON  a.BUGUID = b.BUGUID
WHERE  ISNULL(a.IsProject, 0) = 0
       AND (
               a.ManagerGUID = 'AD942525-768C-4377-AD61-B7518339DAE8'
               OR EXISTS (
                      SELECT 1
                      FROM   Cg_CgSolutionTeam cgst
                             INNER     JOIN Cg_CgSolutionTeamMember cgstm
                                  ON  cgst.TeamGUID = cgstm.TeamGUID
                             INNER JOIN MyUserToOrg d
                                  ON  cgstm.MemberGUID = d.OrgGuid
                             INNER JOIN cg_CgSolution c
                                  ON  cgst.CgSolutionGUID = c.CgSolutionGUID
                      WHERE  c.CgPlanAdjustGUID = a.CgPlanAdjustGUID
                             AND d.UserGuid = 
                                 'AD942525-768C-4377-AD61-B7518339DAE8'
                  )
               OR EXISTS (
                      SELECT 1
                      FROM   cg_ProcDataAuthor cpda
                             INNER JOIN MyUserToOrg mut
                                  ON  cpda.AuthorGUID = mut.OrgGuid
                      WHERE  cpda.BUGUID = a.BUGUID
                             AND mut.UserGuid = 
                                 'AD942525-768C-4377-AD61-B7518339DAE8'
                  )
           )
union
SELECT a.CgPlanAdjustGUID,
       a.CgPlanName
FROM   cg_CgPlan a      
WHERE  ISNULL(a.IsProject, 0) = 1 
AND (
  SELECT COUNT(1)
  FROM   (
             SELECT DISTINCT
                    t.ProjGUID
             FROM   myStationObject so
                    INNER JOIN myStationUser su
                         ON  so.StationGUID = su.StationGUID
                    INNER JOIN vcg_FullProjectTree t
                         ON  so.ObjectGUID = t.ObjectGUID
             WHERE  so.ObjectType = 'project'
                    AND su.UserGUID = 
                        'AD942525-768C-4377-AD61-B7518339DAE8'
                    AND t.ApplySys LIKE '%,0220,%'
                    AND a.ProjectGUIDList LIKE '%'
                        + CAST(t.ProjGUID AS VARCHAR(36))
                        + '%'
         ) m
) > 0
AND
(
   a.ManagerGUID = 'AD942525-768C-4377-AD61-B7518339DAE8'
   OR EXISTS (
          SELECT 1
          FROM   Cg_CgSolutionTeam cgst
                 INNER     JOIN Cg_CgSolutionTeamMember cgstm
                      ON  cgst.TeamGUID = cgstm.TeamGUID
                 INNER JOIN MyUserToOrg d
                      ON  cgstm.MemberGUID = d.OrgGuid
                 INNER JOIN cg_CgSolution c
                      ON  cgst.CgSolutionGUID = c.CgSolutionGUID
          WHERE  c.CgPlanAdjustGUID = a.CgPlanAdjustGUID
                 AND d.UserGuid = 
                     'AD942525-768C-4377-AD61-B7518339DAE8'
      )
   OR EXISTS (
          SELECT 1
          FROM   cg_ProcDataAuthor cpda
                 INNER JOIN MyUserToOrg mut
                      ON  cpda.AuthorGUID = mut.OrgGuid
          WHERE  cpda.BUGUID = a.BUGUID
                 AND mut.UserGuid = 
                     'AD942525-768C-4377-AD61-B7518339DAE8'
      )
) 
这样试试看有没有稍微快点,你这什么都没有,就一堆代码,很难优化的,只能看看你语句上有没有优化的余地。索引和逻辑方面根本没有办法优化。
1秒都不到。。。 学习了。[/quote] 没问题了就结贴吧
-Arvin 2017-11-01
  • 打赏
  • 举报
回复
引用 1 楼 qq_37170555 的回复:

SELECT a.CgPlanAdjustGUID,
       a.CgPlanName
FROM   cg_CgPlan a
       INNER JOIN (
                SELECT DISTINCT
                       bu.BUGUID
                FROM   myStationUser su
                       INNER JOIN myStation s
                            ON  su.StationGUID = s.StationGUID
                       INNER JOIN myBusinessUnit bu
                            ON  s.CompanyGUID = bu.BUGUID
                WHERE  su.UserGUID = 'AD942525-768C-4377-AD'
            ) b
            ON  a.BUGUID = b.BUGUID
WHERE  ISNULL(a.IsProject, 0) = 0
       AND (
               a.ManagerGUID = 'AD942525-768C-4377-AD61-B7518339DAE8'
               OR EXISTS (
                      SELECT 1
                      FROM   Cg_CgSolutionTeam cgst
                             INNER     JOIN Cg_CgSolutionTeamMember cgstm
                                  ON  cgst.TeamGUID = cgstm.TeamGUID
                             INNER JOIN MyUserToOrg d
                                  ON  cgstm.MemberGUID = d.OrgGuid
                             INNER JOIN cg_CgSolution c
                                  ON  cgst.CgSolutionGUID = c.CgSolutionGUID
                      WHERE  c.CgPlanAdjustGUID = a.CgPlanAdjustGUID
                             AND d.UserGuid = 
                                 'AD942525-768C-4377-AD61-B7518339DAE8'
                  )
               OR EXISTS (
                      SELECT 1
                      FROM   cg_ProcDataAuthor cpda
                             INNER JOIN MyUserToOrg mut
                                  ON  cpda.AuthorGUID = mut.OrgGuid
                      WHERE  cpda.BUGUID = a.BUGUID
                             AND mut.UserGuid = 
                                 'AD942525-768C-4377-AD61-B7518339DAE8'
                  )
           )
union
SELECT a.CgPlanAdjustGUID,
       a.CgPlanName
FROM   cg_CgPlan a      
WHERE  ISNULL(a.IsProject, 0) = 1 
AND (
  SELECT COUNT(1)
  FROM   (
             SELECT DISTINCT
                    t.ProjGUID
             FROM   myStationObject so
                    INNER JOIN myStationUser su
                         ON  so.StationGUID = su.StationGUID
                    INNER JOIN vcg_FullProjectTree t
                         ON  so.ObjectGUID = t.ObjectGUID
             WHERE  so.ObjectType = 'project'
                    AND su.UserGUID = 
                        'AD942525-768C-4377-AD61-B7518339DAE8'
                    AND t.ApplySys LIKE '%,0220,%'
                    AND a.ProjectGUIDList LIKE '%'
                        + CAST(t.ProjGUID AS VARCHAR(36))
                        + '%'
         ) m
) > 0
AND
(
   a.ManagerGUID = 'AD942525-768C-4377-AD61-B7518339DAE8'
   OR EXISTS (
          SELECT 1
          FROM   Cg_CgSolutionTeam cgst
                 INNER     JOIN Cg_CgSolutionTeamMember cgstm
                      ON  cgst.TeamGUID = cgstm.TeamGUID
                 INNER JOIN MyUserToOrg d
                      ON  cgstm.MemberGUID = d.OrgGuid
                 INNER JOIN cg_CgSolution c
                      ON  cgst.CgSolutionGUID = c.CgSolutionGUID
          WHERE  c.CgPlanAdjustGUID = a.CgPlanAdjustGUID
                 AND d.UserGuid = 
                     'AD942525-768C-4377-AD61-B7518339DAE8'
      )
   OR EXISTS (
          SELECT 1
          FROM   cg_ProcDataAuthor cpda
                 INNER JOIN MyUserToOrg mut
                      ON  cpda.AuthorGUID = mut.OrgGuid
          WHERE  cpda.BUGUID = a.BUGUID
                 AND mut.UserGuid = 
                     'AD942525-768C-4377-AD61-B7518339DAE8'
      )
) 
这样试试看有没有稍微快点,你这什么都没有,就一堆代码,很难优化的,只能看看你语句上有没有优化的余地。索引和逻辑方面根本没有办法优化。
1秒都不到。。。 学习了。
吉普赛的歌 2017-11-01
  • 打赏
  • 举报
回复
IF NOT EXISTS(
	SELECT CgPlanAdjustGUID,
		   CgPlanName
	FROM   cg_CgPlan a
	WHERE a.ManagerGUID = 'AD942525-768C-4377-AD61-B7518339DAE8'
	OR EXISTS (
			SELECT 1
			FROM   Cg_CgSolutionTeam cgst
					INNER	 JOIN Cg_CgSolutionTeamMember cgstm
						ON  cgst.TeamGUID = cgstm.TeamGUID
					INNER JOIN MyUserToOrg d
						ON  cgstm.MemberGUID = d.OrgGuid
					INNER JOIN cg_CgSolution c
						ON  cgst.CgSolutionGUID = c.CgSolutionGUID
			WHERE  c.CgPlanAdjustGUID = a.CgPlanAdjustGUID
					AND d.UserGuid = 
						'AD942525-768C-4377-AD61-B7518339DAE8'
		)
	OR EXISTS (
			SELECT 1
			FROM   cg_ProcDataAuthor cpda
					INNER JOIN MyUserToOrg mut
						ON  cpda.AuthorGUID = mut.OrgGuid
			WHERE  cpda.BUGUID = a.BUGUID
					AND mut.UserGuid = 
						'AD942525-768C-4377-AD61-B7518339DAE8'
		)
)
BEGIN
	SELECT CgPlanAdjustGUID,
		   CgPlanName
	FROM   cg_CgPlan a
	WHERE 1=0 
END
ELSE
BEGIN
	SELECT CgPlanAdjustGUID,
       CgPlanName
	FROM   cg_CgPlan a
	WHERE  ISNULL(a.IsProject, 0) = 0
			AND EXISTS (SELECT 1
							FROM   myStationUser su
									INNER JOIN myStation s
										ON  su.StationGUID = s.StationGUID
									INNER JOIN myBusinessUnit bu
										ON  s.CompanyGUID = bu.BUGUID
							WHERE  su.UserGUID = 'AD942525-768C-4377-AD61-B7518339DAE8'
									AND bu.IsCompany = 1
									AND bu.BUGUID=a.BUGUID
							)
	UNION ALL
	SELECT CgPlanAdjustGUID,
       CgPlanName
	FROM   cg_CgPlan a
	WHERE ISNULL(a.IsProject, 0) = 1
		AND EXISTS(
			SELECT 1
			FROM   myStationObject so
				INNER JOIN myStationUser su
						ON  so.StationGUID = su.StationGUID
				INNER JOIN vcg_FullProjectTree t
						ON  so.ObjectGUID = t.ObjectGUID
			WHERE  so.ObjectType = 'project'
				AND su.UserGUID = 
					'AD942525-768C-4377-AD61-B7518339DAE8'
				AND t.ApplySys LIKE '%,0220,%'
				AND a.ProjectGUIDList LIKE '%'
					+ CAST(t.ProjGUID AS VARCHAR(36))
					+ '%'
		)
END
先看看这个需要多少秒吧?
听雨停了 2017-11-01
  • 打赏
  • 举报
回复

SELECT a.CgPlanAdjustGUID,
       a.CgPlanName
FROM   cg_CgPlan a
       INNER JOIN (
                SELECT DISTINCT
                       bu.BUGUID
                FROM   myStationUser su
                       INNER JOIN myStation s
                            ON  su.StationGUID = s.StationGUID
                       INNER JOIN myBusinessUnit bu
                            ON  s.CompanyGUID = bu.BUGUID
                WHERE  su.UserGUID = 'AD942525-768C-4377-AD'
            ) b
            ON  a.BUGUID = b.BUGUID
WHERE  ISNULL(a.IsProject, 0) = 0
       AND (
               a.ManagerGUID = 'AD942525-768C-4377-AD61-B7518339DAE8'
               OR EXISTS (
                      SELECT 1
                      FROM   Cg_CgSolutionTeam cgst
                             INNER     JOIN Cg_CgSolutionTeamMember cgstm
                                  ON  cgst.TeamGUID = cgstm.TeamGUID
                             INNER JOIN MyUserToOrg d
                                  ON  cgstm.MemberGUID = d.OrgGuid
                             INNER JOIN cg_CgSolution c
                                  ON  cgst.CgSolutionGUID = c.CgSolutionGUID
                      WHERE  c.CgPlanAdjustGUID = a.CgPlanAdjustGUID
                             AND d.UserGuid = 
                                 'AD942525-768C-4377-AD61-B7518339DAE8'
                  )
               OR EXISTS (
                      SELECT 1
                      FROM   cg_ProcDataAuthor cpda
                             INNER JOIN MyUserToOrg mut
                                  ON  cpda.AuthorGUID = mut.OrgGuid
                      WHERE  cpda.BUGUID = a.BUGUID
                             AND mut.UserGuid = 
                                 'AD942525-768C-4377-AD61-B7518339DAE8'
                  )
           )
union
SELECT a.CgPlanAdjustGUID,
       a.CgPlanName
FROM   cg_CgPlan a      
WHERE  ISNULL(a.IsProject, 0) = 1 
AND (
  SELECT COUNT(1)
  FROM   (
             SELECT DISTINCT
                    t.ProjGUID
             FROM   myStationObject so
                    INNER JOIN myStationUser su
                         ON  so.StationGUID = su.StationGUID
                    INNER JOIN vcg_FullProjectTree t
                         ON  so.ObjectGUID = t.ObjectGUID
             WHERE  so.ObjectType = 'project'
                    AND su.UserGUID = 
                        'AD942525-768C-4377-AD61-B7518339DAE8'
                    AND t.ApplySys LIKE '%,0220,%'
                    AND a.ProjectGUIDList LIKE '%'
                        + CAST(t.ProjGUID AS VARCHAR(36))
                        + '%'
         ) m
) > 0
AND
(
   a.ManagerGUID = 'AD942525-768C-4377-AD61-B7518339DAE8'
   OR EXISTS (
          SELECT 1
          FROM   Cg_CgSolutionTeam cgst
                 INNER     JOIN Cg_CgSolutionTeamMember cgstm
                      ON  cgst.TeamGUID = cgstm.TeamGUID
                 INNER JOIN MyUserToOrg d
                      ON  cgstm.MemberGUID = d.OrgGuid
                 INNER JOIN cg_CgSolution c
                      ON  cgst.CgSolutionGUID = c.CgSolutionGUID
          WHERE  c.CgPlanAdjustGUID = a.CgPlanAdjustGUID
                 AND d.UserGuid = 
                     'AD942525-768C-4377-AD61-B7518339DAE8'
      )
   OR EXISTS (
          SELECT 1
          FROM   cg_ProcDataAuthor cpda
                 INNER JOIN MyUserToOrg mut
                      ON  cpda.AuthorGUID = mut.OrgGuid
          WHERE  cpda.BUGUID = a.BUGUID
                 AND mut.UserGuid = 
                     'AD942525-768C-4377-AD61-B7518339DAE8'
      )
) 
这样试试看有没有稍微快点,你这什么都没有,就一堆代码,很难优化的,只能看看你语句上有没有优化的余地。索引和逻辑方面根本没有办法优化。

594

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧