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的聚合索引。再进行测试的时候速度就有了很大提升。

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

  • 相关阅读:
    mysql设置指定ip远程访问连接实例
    Hibernate学习笔记之EHCache的配置
    关于Hibernate中的Configuration
    Hibernate的一级缓存
    Hibernate工作原理
    org.hibernate.HibernateException: Could not parse configuration: /hibernate.cfg.xml
    微信多客户端
    【hadoop之翊】——CentOS6.5 Linux上面编译Hadoop2.4源代码
    HDU 2102 A计划 (三维的迷宫BFS)
    SSO 中间件 kisso
  • 原文地址:https://www.cnblogs.com/aiwuziji/p/6825318.html
Copyright © 2011-2022 走看看