文档章节

你的SQL Server碎片真的需要重新构建(Rebuild)或者重新组织(Recognize)吗?

黄裳23
 黄裳23
发布于 2016/07/12 17:34
字数 529
阅读 44
收藏 0

最近负责的项目在客户那出了一个问题

场景:服务端会定期删除过期的数据,可能,客户的服务器器在删除数据的时点,Service down了

问题:删除没有执行,大量数据残留,导致磁盘空间不足,用户的动作执行缓慢,受阻

和领导负责一块研究解决问题的过程中,解决方案是定期删除残留的数据,并压缩日志文件。

同时领导带出了一个索引碎片的问题,说索引碎片会影响大量数据的查询,本来,这个数据库的变更就很少,服务端的操作主要就是查询。

经过试验证明,简单的Select查询, 索引碎片 不会有太大的影响,以下是验证的过程:

1. 新建数据库,模拟应用程序的数据,通过SqlBulkCopy快速插入超过3个月的数据,大概20G。

2. 查看索引碎片率:45%。

3. 通过查询分析+select语句获取了3天,1周,1个月,3个月的数据,统计花费的时间

SET STATISTICS profile ON
SET STATISTICS io ON
SET STATISTICS time ON
go
  ---你要测试的sql语句
SELECT *  FROM [UniversalSchool].[dbo].[Student] where StudentID = 35 AND Datetime BETWEEN cast('2017-01-01 00:00:00.000' as datetime) and cast('2017-04-01 00:00:00.000' as datetime);       
SET STATISTICS profile OFF
SET STATISTICS io OFF
SET STATISTICS time OFF
go

结果:

★ 3天
5219 毫秒。

★ 1周
11245 毫秒。

★ 1月
51478 毫秒。

★ 3月
175508 毫秒。

4. 通过以下命令将索引重新构建

sqlcmd -E -S (local)\DBTEST -Q "use  UniversalSchool ;ALTER INDEX ALL ON  Student REBUILD"

5.  查看索引碎片率:0.12%。

6. 再执行第3.步,统计结果

★ 3天
5222 毫秒。

★ 1周
10724 毫秒。

★ 1月
50237 毫秒。

★ 3月
164040 毫秒。

从3和6的统计结果来看,我是不是完全没必要去重构索引了呢?

© 著作权归作者所有

共有 人打赏支持
黄裳23
粉丝 2
博文 53
码字总数 9420
作品 0
西安
高级程序员
提升SQL Server速度 整理索引碎片

数据库表A有十万条记录,查询速度本来还可以,但导入一千条数据后,问题出现了。当选择的数据在原十万条记录之间时,速度还是挺快的;但当选择的数据在这一千条数据之间时,速度变得奇慢。 ...

SANSOM
2013/11/08
0
0
《SQL Server 2008从入门到精通》--20180723

目录 1.架构 1.1.创建架构并在架构中创建表 1.2.删除架构 1.3.修改表的架构 2.视图 2.1.新建视图 2.2.使用视图修改数据 2.3.删除视图 3.索引 3.1.聚集索引 3.2.非聚集索引 3.3.创建索引 3.4....

kukubear0
07/24
0
0
索引,索引的建立、修改、删除

索引 索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查。建立索引是一项技术性要求高的工作。一般在数据库设计阶段的与数据库结构一道考虑。应用...

恋空御月
2016/05/17
4
0
索引碎片与填充因子

在SQL Server中,存储数据的最小单位是页,每一页所能容纳的数据为8060字节.而页的组织方式是通过B树结构(表上没有聚集索引则为堆结构,不在本文讨论之列)如下图: 在聚集索引B树中,只有叶子...

坦途abc
02/27
0
0
优秀的架构师各有各的优秀而平庸的却逃不过这九个方面

很可能有人花了无数精力来规划所在企业组织的IT架构,然后把这个计划交给其他人来构建和实现,随着计算环境不可避免的增长,还需要由一些人来对其进行维护。而且有可能这个链条中的某个人,在...

脱毛的程序猿
01/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

GO冒泡,二分查找

package mainimport("fmt")func main() {var arr [5]int = [5]int{11,13,9,2,25}maopao(&arr)fmt.Println("arr = ", arr) //[2 9 11 13 25]findIndex := binaryFind(&arr, 0......

汤汤圆圆
10分钟前
1
0
工作2年半跳槽面试阿里,成功拿到offer,凭什么?

2015年刚毕业的我,进入了一家小小的公司实习工作,在学校学了三年软件开发的我,还是想去寻找一份互联网行业的工作,这样更能学以致用发挥自己的特长。一直到18年三月份,我辞掉已有的工作,...

java知识分子
15分钟前
1
0
讲述下:Linux的10个最危险的命令

导读 Linux命令行佷有用、很高效,也很有趣,但有时候也很危险,尤其是在你不确定你自己在正在做什么时候。这篇文章将会向你介绍十条命令,但你最好不要尝试着去使用。 当然,以下命令通常都...

问题终结者
19分钟前
1
0
分库分表后如何部署上线?

引言 我们先来讲一个段子 面试官:“有并发的经验没?” 应聘者:“有一点。” 面试官:“那你们为了处理并发,做了哪些优化?” 应聘者:“前后端分离啊,限流啊,分库分表啊。。” 面试官:...

Java烂猪皮
24分钟前
1
0
Redis源码阅读笔记-快速列表

快速列表 快速列表(quicklist)是由压缩列表(ziplist)组成的一个双向链表,链表中,每一个节点都是以压缩列表(ziplist)的结构保存。 在 Redis3.2 后加入的新数据结构,在列表键中取代了双向链...

Jian_Ming
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部