“GOV_主题信息列表”标签SQL查询优化
这个月,突然收到一个政府网站关于政务公开,主题列表页访问速度奇慢,而且当分页数量越大访问速度越慢的反馈!!!一开始还以为是录入的数据有问题,经过一系列排查,最终锁定是由于同一主题下的数据超过1600条导致的错误,从而锁定是由于系统默认标签--“GOV_主题信息列表”SQL查询语句问题!
好吧,直接贴代码吧,系统默认标签查询语句如下:
优化过程:
1.用SQL的 INNER JOIN 内连接 代替 AND ID NOT IN();
2.用系统的储存过程 [dbo].[PR_Common_PagingLarge] 替代 NOT IN();
根据这个思路把查询语句优化为如下:
EXEC [dbo].[PR_Common_PagingLarge] 'PE_GV_PublicInformation PIN INNER JOIN PE_GV_PublicInfoTheme PT ON (PIN.ThemeId=PT.ThemeId)','PIN.ID',
'*',@pagesize,@startrow ,'(PT.ParentId =@themeId OR PT.ThemeId=@themeId) AND PIN.IsExpired = 0 AND PIN.Status = 2','','PIN.PublicTime DESC'
SELECT COUNT(*) FROM PE_GV_PublicInformation PIN INNER JOIN PE_GV_PublicInfoTheme PT ON (PIN.ThemeId=PT.ThemeId) WHERE (PT.ParentId =@themeId OR PT.ThemeId=@themeId) AND PIN.IsExpired = 0 AND PIN.Status = 2
让人可喜的结果是客户同一主题下的1960条数据访问速度两分钟以上或者直接报错直接提升到忽略不计的1S左右
如上图第110页,每页26条数据只需986ms就加载完毕!
写一下:个人理解的系统
[dbo].[PR_Common_PagingLarge] 的应用场景吧!
EXEC [dbo].[PR_Common_PagingLarge] '数据库表','关键字段','*',@pagesize,@startrow,'查询条件','','排序方式'
好了,不多说:分享下标签吧!
【GOV_主题信息列表】
用户登录
还没有账号?
立即注册