zoukankan      html  css  js  c++  java
  • sql性能优化之多表联查

    先贴上我优化后的核心代码:

    select * into #result from (
    select p.AchivementCount,isnull(a.ByAttentionCount,0) ByAttentionCount, u.Id,u.FullName,j.Name PostionName,u.ProfessionId,u.Disabled,u.UserName,u.ResearchArea,u.PositionId,u.DepartmentId,u.ORCID,d.DepartmentName, isnull(r.SCIIndex, 0) SCICount, isnull(e.EIIndex, 0) EICount,ISNULL(g.SCIOrEIIndex,0) SCIOrEICount

    from IdentityUser u

    inner Join #AchivementCountComputer p on u.Id=p.SuspectedId

    LEFT JOIN Department d ON d.Id = u.DepartmentId

    LEFT JOIN JobPosition j ON u.PositionId=j.Id

    left join #ByAttentionCountComputer a on a.ByAttentionID=u.Id

    left JOIN #SCIIndexComputer r ON u.ID = r.SuspectedID
    LEFT JOIN #EIIndexComputer e ON u.ID = e.SuspectedID
    LEFT JOIN #SCIOrEIIndexComputer g ON u.ID = g.SuspectedID

    where u.ProfessionId=(select Id from JobProfession where Name='教师') and u.Disabled=0 and p.AchivementCount>0

    ) re


    优化前的代码是用视图写的,每张临时表又是一个多表查询。不仅难以阅读,而且放到服务器上,web页面加载不出来,由此可见,速度不是慢,是太慢了,在sqlserver中单独执行,大约在40s-55s之间。

    优化的方式:

     1、查看sql语句,尽量简化代码,有个清晰的结构。由于业务复杂,于是sql语句难免复杂,但是从代码易读性上考虑,可以优化代码结构。比如我们可以用cte。

     2、查看sqlserver执行计划,图十分复杂,看的人眼花缭乱。看这图,得从右边向左边看,慢慢分析,看主要性能耗费在哪个环节上。

     3、查看I/O统计

  • 相关阅读:
    Jenkins常见的构建触发器
    NTP服务器搭建
    Jenkins钉钉通知
    Jenkins邮件通知
    升级到k8s的17.0出现问题
    推荐K8s的一键安装和一键升级
    Pipeline流水线项目构建
    Jenkins构建Maven项目
    Jenkins构建自由风格的项目
    Codeforces Round #570 (Div. 3 )A
  • 原文地址:https://www.cnblogs.com/wangqiang3311/p/5684639.html
Copyright © 2011-2022 走看看