SQL Server优化视图查询速度

在这里插入图片描述

起因

最近做了个项目,完工之后发现项目某个页面的查询速度相当慢,最快查询20秒出结果,最慢查询40秒出结果,这对于客户的体验感来说,应该是相当差的,在不优化数据库部署的情况下,只能去优化查询的方式

优化查询

在不使用遍历查询,而使用视图查询的情况下,很显然,视图的查询是更快的,但是这个项目其实已经用上了视图查询,那就只能去优化视图了,首先,可以知道的是,在视图的查询中,需要查出来的字段越少,速度可能就会越快,当然,如果你只是用于统计计数,那毫无疑问,可以选择count(1)去进行查询,它的速度应该是很难在继续往后优化了(在我目前的认知里,只针对现在的我),但是这个项目它需要的不是统计计数,而是需要数据的,那么就只能去选择减少字段,但是这个视图应用的范围特别的广,手机端,pc端都有使用,如果单对这个页面进行优化,减少字段,很显然不可行,那么就只能再建一个视图,专门针对这个页面的视图,从而去取只有这个页面需要的字段,这种方法可行,但是由于这个项目是别人先做的,我本次做是加新功能,很多字段都要去查,能不能删,需不需要,很显然,也是一件费时费力的事情。

意外发现

之前视图的源代码是这样的
这里是原来的视图源代码
筛查条件是这样的
筛查条件
很显然,VisitDate,UserID都是a表中的数据,在这种情况下,整个查询速度大概需要20-40秒
后来我将视图改成了这样
在这里插入图片描述
将a表中的VisitDate,UserID改到了r表中,那么筛选条件中的这两个字段也就是对应到r表中的数据,这里需要注意的是我这两张表中,这两个字段的数据是一致的,a表和r表数据条数是一致的,r表是a表的关联数据表,所以可以这样做,当这样做之后,查询速度从20-40秒,变成了1-2秒

猜测

因为这种现象我也是第一次遇到,遇到就是学到嘛,猜测大概率是因为left join的原因,因为在这个视图中主要是根据ReportRecord表的数据来的,在对r表的数据进行筛选之后,被筛查出去的数据的这部分,后面的表就都可以不用查,主要应该是这个原因提升了这个查询速度,当然还猜测因为a表用了个INNER JOIN导致查询速度不快,不然应该速度差距也不会这么离谱。

表象结论

根据这个表象,可以得出,以后在传出字段的时候,尽量往left左边的表的字段传出,在多表数据一样的情况下,这样筛查也会去筛查左边表里面的数据,会加快查询速度,程序这东西,真的还是要多学,才能扩展开来自己的视野,很显然这部分就在我的盲区,得加油。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值