SQL SERVER 更新统计信息

zestsnake 2018-09-14 08:18:02
sql server 2008 版本。主表已经根据日期进行了分区,每个月1个分区,每个分区约有90万到100万条记录。
每天需要插入大约3-4万条数据。(预计1年是1200W左右)
现在的问题是,同样的SQL语句(进行了一系列的求和,GROUP BY)。比如几天导入了9.14的数据,我查9.14的,就非常慢。
而查9.13,或者之前的就很快,(每周1,3,5会由计划任务更新索引,更新统计信息)几乎是秒出。

但如果9.14导完数据后,对主表进行重建索引
DECLARE @sql NVARCHAR(MAX)
SELECT @sql=ISNULL(@sql,'')+'ALTER INDEX ['+i.name+'] ON '+OBJECT_NAME(i.[object_id])+' REBUILD PARTITION = ALL;
' FROM sys.indexes AS i
WHERE i.[object_id]=OBJECT_ID('balance') -
PRINT @sql
EXEC(@sql)


然后更新统计信息

update STATISTICS balance with fullscan


有了这2步操作后,就可以秒出。

请教大家一下,这个统计信息,更新索引,执行的频率应该是多少?像我这样,每天4W的记录insert,是否应该每天在插入记录后,
执行重建索引,然后更新统计信息(用上边的语句)?
...全文
745 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zestsnake 2018-09-26
  • 打赏
  • 举报
回复
顶一下顶一下
吉普赛的歌 版主 2018-09-26
  • 打赏
  • 举报
回复
表大了, 事情就复杂了, 没必要硬着要求大表有多好的性能。 管理和规划也是很重要的事。
吉普赛的歌 版主 2018-09-26
  • 打赏
  • 举报
回复
统计信息自动更新的阈值 = 本表 * 20% 1000万 * 20% +500 =200万 + 500 也就是说: 你一次至少插入 200万 + 500 才能自动更新统计信息。 这个没什么好说了, 你还是插入后直接脚本人为更新一次统计信息吧。 建议: 把热数据和冷数据分开: 当前表只保留当前一个月的数据; 本年表只保留一个月后及一年内的数据; 其它数据保存在历史表。
xiaoxiangqing 2018-09-15
  • 打赏
  • 举报
回复
可以用计划定时更新统计信息
zestsnake 2018-09-14
  • 打赏
  • 举报
回复
其实我想明确的是,究竟在什么样的条件下,要更新统计信息,仅3w条记录的插入,就会有这么大的查询速度影响吗?

还有个问题,有的时候,重建索引好像没有效果,一定要更新统计信息。
而且 要 update STATISTICS balance with fullscan , update STATISTICS balance也不行
吉普赛的歌 版主 2018-09-14
  • 打赏
  • 举报
回复
能解决的,都不是问题。既然你知道这样可以解决,那你还犹豫什么?

不过需要指出的是:重建索引这个过程其实已经把统计信息更新了,不需要再更新统计信息

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧