zoukankan      html  css  js  c++  java
  • SqlServer索引假脱机的解决

      今天产品提出平台打开某一个模块速度特别慢,甚至有时会出现504的错误。赶紧连接正式版数据库本地调试代码,发现进行数据获取时,打开数据库和关闭数据库中间间隔的时间有5秒之久,这是数据量较少的情况,如果数据量更大的话就有可能出现错误了。看来问题是出在sql语句这里,把sql语句拷贝出来放到查询分析器中进行查看,速度还是很快的,但是查看执行计划的时候发现了问题,有3个索引假脱机的提示,并且开销都很大。

      以前没注意过这个索引假脱机,赶紧去百度了一下。看别人说的有点绕,总结起来就是索引缺失引起的,尤其是在使用一些复杂查询的时候。以我们平台的这个模块为例,当前是要查询所有我发布的,需要我审批的以及我审批通过的。查询条件如下

    a.UserId=#UserId# or EXISTS(SELECT AskForLeaveAuditId FROM dbo.AskForLeaveAudit where AskForLeaveAudit.AskForLeaveId=a.AskForLeaveId and UserId=#UserId#) or  EXISTS(SELECT AuditAskForLeaveId FROM dbo.AuditAskForLeave where AuditAskForLeave.AskForLeaveId=a.AskForLeaveId and AuditUserId=#UserId#

      我给AskForLeaveAudit表增加了一个AskForLeaveId和UserId的聚合索引,又给AuditAskForLeave表增加了一个AskForLeaveId和AuditUserId的聚合索引。再进行测试的时候速度就有了很大提升。

      其实我觉得想根本上解决问题还是应该把业务逻辑分开,比如分成几个模块,只是查看我发布的,需要我审批的,以及我审批通过的,这样业务逻辑相对简单,效率上可以有更好的表现。当然这个是业务决定的,我们还是要能解决这些问题才行。

  • 相关阅读:
    EXCEL某列长度超过255个字符导入SQL SERVER2005的处理方法
    正则同时获取a标签里的href,text 2项
    火柴棍
    特殊数
    骨牌铺方格
    拼图
    挑战题之排列生成
    模拟 找规律
    sort
    贪心 简单背包问题
  • 原文地址:https://www.cnblogs.com/aiwuziji/p/6825318.html
Copyright © 2011-2022 走看看