SqlServer索引假脱机的解决

摘要:
看来问题是出在sql语句这里,把sql语句拷贝出来放到查询分析器中进行查看,速度还是很快的,但是查看执行计划的时候发现了问题,有3个索引假脱机的提示,并且开销都很大。以前没注意过这个索引假脱机,赶紧去百度了一下。查询条件如下a.UserId=#UserId#orEXISTSorEXISTS(SELECTAuditAskForLeaveIdFROMdbo.AuditAskForLeavewhereAuditAskForLeave.AskForLeaveId=a.AskForLeaveIdandAuditUserId=#UserId#我给AskForLeaveAudit表增加了一个AskForLeaveId和UserId的聚合索引,又给AuditAskForLeave表增加了一个AskForLeaveId和AuditUserId的聚合索引。当然这个是业务决定的,我们还是要能解决这些问题才行。

今天产品提出平台打开某一个模块速度特别慢,甚至有时会出现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的聚合索引。再进行测试的时候速度就有了很大提升。

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

免责声明:文章转载自《SqlServer索引假脱机的解决》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇浏览器窗口之间传递数据使用iText库创建PDF文件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

处理百万级以上的数据提高查询速度的方法

处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而...

手动更新nexus的索引

安装nexus 1.下载 源码包nexus-2.13.0-01-bundle.tar.gz 下载地址http://www.sonatype.org/nexus/ 2.解压源码包 3.启动并访问 ./nexus start 启动 restart重启 stop 关闭 ip:端口/nexus访问 端口可在config的nexus.properties中修改 默认...

MySQL性能调优思路

1.MySQL性能调优思路 如果一台服务器出现长时间负载过高 /周期性负载过大,或偶尔卡住如何来处理? 是周期性的变化还是偶尔问题?是服务器整体性能的问题, 还是某单条语句的问题? 具体到单条语句, 这条语句是在等待上花的时间,还是查询上花的时间? 1.1. 监测并观察服务器的状态. 观察服务器状态, 一般用如下2个命令 Show status;...

Numpy的补充(重要!!)

轴的概念   英文解释  https://www.sharpsightlabs.com/blog/numpy-axes-explained/   汉化解释 https://www.jianshu.com/p/f4e9407f9f9d 多维数组的索引及切片   https://blog.csdn.net/brucewong0516/article/detai...

ORACLE检查找出损坏索引(Corrupt Indexes)的方法详解

ORACLE检查找出损坏索引(Corrupt Indexes)的方法详解 潇湘隐者 2020-12-17我要评论 这篇文章主要给大家介绍了关于ORACLE如何检查找出损坏索引(Corrupt Indexes)的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧 索引 索引与表一样,也属于段(segment)的...

Kafka日志存储

1.文件目录布局 Kafka消息以日志文件的形式存储,不同主题下不同分区的消息分开存储,同一个分区的不同副本分布在不同的broker上存储 逻辑上看来日志是以副本为单位的,每个副本对应一个log对象,实际在物理上,一个log划分为多个logSegment 创建一个topic为3个分区,会在log.dirs路径下创建三个文件夹,代表3个分区,命名规则为“to...