SQL Server【提高】碎片
碎片
当对索引所在的基础数据表进行增删改时,若存储的数据进行了不适当的跨页(SQL Server中存储的最小单位是页,页是不可再分的),就会导致索引碎片的产生。
外部碎片
插入的数据使页与页之间造成断续,比如,插入的数据正好在页中最后一行,被挤出到别的页的数据,与原来的页之间没有了连续,这后果就严重了,这种情况就是外部的碎片。
内部碎片
当索引页没有用到最大量时就产生了内部碎片。
碎片处理
- 查看表空间碎片化的一些统计信息
dbcc showcontig
use ${数据库名}
dbcc showcontig with all_indexes
--查看指定表的所有索引的碎片信息
dbcc showcontig (${表名}) with all_indexes
--查看指定表、指定索引的碎片信息
dbcc showcontig (${表名},${索引名})
统计脚本
select
db_name() as dbname,
t.name as tablename,
s.name as schemaname,
p.rows as rowcounts,
sum(a.total_pages) * 8 as totalspacekb,
cast(round(((sum(a.total_pages) * 8) / 1024.00), 2) as numeric(36, 2)) as 总共占用空间mb,
sum(a.used_pages) * 8 as 总使用空间kb,
cast(round(((sum(a.used_pages) * 8) / 1024.00), 2) as numeric(36, 2)) as 总使用空间mb,
(sum(a.total_pages) - sum(a.used_pages)) * 8 as 碎片化空间kb,
cast(round(((sum(a.total_pages) - sum(a.used_pages)) * 8) / 1024.00, 2) as numeric(36, 2)) as 碎片化空间mb
from
sys.tables t
inner join
sys.indexes i on t.object_id = i.object_id
inner join
sys.partitions p on i.object_id = p.object_id and i.index_id = p.index_id
inner join
sys.allocation_units a on p.partition_id = a.container_id
left outer join
sys.schemas s on t.schema_id = s.schema_id
where
t.is_ms_shipped = 0
and i.object_id > 0
group by
t.name, s.name, p.rows
order by
总共占用空间mb desc
删除索引并重建
使用DROP_EXISTING语句重建索引
使用ALTER INDEX REBUILD重新生成索引。(推荐)
使用ALTER INDEX REORGANIZE重新组织索引。(推荐)

REBUILD和Reorganize区别
Rebuild 是重新创建,将Index之前占用的空间释放,重新申请空间来创建index
Reorganize 是重新组织,将index的叶子节点进行重新组织
SQL Server【提高】碎片的更多相关文章
- sql server mdf碎片级数据库修复,数据库碎片级提取
sql server mdf碎片级数据库修复,数据库碎片级提取 大家都知道MDF数据库文件一般都比较大,在磁盘中往往被存放到不连续的逻辑簇中,久而久之就形成了文件碎片,当文件被误删除或者格式化后, ...
- SQL Server提高事务复制效率优化(一)总体概述
随着公司业务的发展,数据量增长迅速,在解决Scale Out的同时,还要考虑到主从的复制延迟问题,尽量降到1s以内满足线上业务,如果不调整,SQL Server默认的配置可能平均要3s左右.生产的 ...
- SQL Server提高并发查询效率
同事写了个程序用创建多个线程使用ado同时对同个数据库进行相同的查询,涉及2张数据表的联查.当线程数非常多的情况下,读取数据的效率就会变得很慢,例如50个线程同时查询大概3000条数据,查询完成后通过 ...
- SQL Server索引碎片整理实际操作记录
SQL Server 版本是 2008 R2. 查询数据库索引碎片情况的 SQL 语句(来源): SELECT OBJECT_NAME(ind.OBJECT_ID) AS TableName, ind ...
- SQL Server 索引碎片产生原理重建索引和重新组织索引
数据库存储本身是无序的,建立了聚集索引,会按照聚集索引物理顺序存入硬盘.既键值的逻辑顺序决定了表中相应行的物理顺序 多数情况下,数据库读取频率远高于写入频率,索引的存在 为了读取速度牺牲写入速度 页 ...
- [笔记整理]SQL Server 索引碎片 和 重建索引
铺垫知识点: 数据库存储本身是无序的,建立了聚集索引,会按照聚集索引物理顺序存入硬盘.既键值的逻辑顺序决定了表中相应行的物理顺序 多数情况下,数据库读取频率远高于写入频率,索引的存在 为了读取速度牺牲 ...
- SQL Server数据库碎片整理
碎片产生 在SQL Server中,存储数据的最小单位是页,每一页所能容纳的数据为8060字节.而页的组织方式是通过B树结构 SQL Server向每个页内存储数据的最小单位是表的行(Row) ...
- SQL SERVER 索引碎片
一次发现同样的SQL在线上库和复制库执行时间差好多,重新创建相关表索引,性能提升明显,怀疑索引有碎片
- SQL Server 提高执行效率的16种方法
1.尽量不要在where中包含子查询; 关于时间的查询,尽量不要写成:where to_char(dif_date,'yyyy-mm-dd')=to_char('2007-07-01′,'yyyy-m ...
- SQL Server提高事务复制效率优化(四)修改数据同步过程优化
1.原理 我说的数据修改同步过程指的是在快照生成完毕,分发代理将快照应用于订阅服务器完成订阅服务器初始化后,发布服务器后续的更改同步到订阅服务器过程,这也就是我们常常关注的延迟.此过程主要 ...
随机推荐
- Anaconda 环境中安装OpenCV (cv2)
1.使用Anaconda 的对应环境,查看环境中的Python版本号 (1)使用Anaconda 查看存在的环境:conda info --env (2)激活环境:conda activate XXX ...
- Jmeter 如何把 时间戳 转为 本地时间
一.引入主题(time) jmeter中,有很多已经封装好的函数,使用这些函数,就能实现某些特定的功能,这对于没有代码基础,或代码基础薄弱的同学来说,是一个非常大的福音. 二.Jmeter把时间戳转为 ...
- redhat6.5_server_install
CentOS repo: wget http://mirrors.163.com/.help/CentOS6-Base-163.repo EPEL wget http://download.fedor ...
- 四种语言刷算法之删除链表的倒数第 N 个结点
力扣19. 删除链表的倒数第 N 个结点 1.C /** * Definition for singly-linked list. * struct ListNode { * int v ...
- WPF里面触发器
WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改外观属性,或者执行动画等操作. WPFtrigger的主要类型有:Trigger. ...
- mysql库操作msyql
查看所有数据库 show databases; 查看当前使用的数据库 select database(); 使用数据库 use 数据库名; 创建数据库 create database 数据库名 cha ...
- 如何使用源码编译安装Nginx服务器
安装 PCRE : 网站:http://pcre.org/ 下载: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ ftp://ftp.c ...
- idea-lombok使用
一.添加 lombok 插件 file -- setting -- plugins - 输入 Lombok 搜索,进行安装 二.引入依赖 <dependency> <groupId ...
- 2022-05-30内部群每日三题-清辉PMP
1.对于一个长期的基础设施项目,由于全球商业环境,项目经理必须获得风险最小的供应商.项目经理应该使用什么合同类型? A.固定总价合同(FFP) B.成本加固定费用合同(CPFF) C.总价加激励费用合 ...
- 2.13python基础知识
编程语言的发展史 1.机器语言:内部用0和1表示 2.汇编语言:简单的字母表示二进制 3.高级语言:人类可以理解的 1.执行效率:机器语言>汇编语言>高级语言(编译型>解释型) 2. ...