碎片

当对索引所在的基础数据表进行增删改时,若存储的数据进行了不适当的跨页(SQL Server中存储的最小单位是页,页是不可再分的),就会导致索引碎片的产生。

  • 外部碎片

    插入的数据使页与页之间造成断续,比如,插入的数据正好在页中最后一行,被挤出到别的页的数据,与原来的页之间没有了连续,这后果就严重了,这种情况就是外部的碎片。

  • 内部碎片

    当索引页没有用到最大量时就产生了内部碎片。

碎片处理

  1. 查看表空间碎片化的一些统计信息 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
  1. 删除索引并重建

  2. 使用DROP_EXISTING语句重建索引

  3. 使用ALTER INDEX REBUILD重新生成索引。(推荐)

  4. 使用ALTER INDEX REORGANIZE重新组织索引。(推荐)

REBUILD和Reorganize区别

Rebuild 是重新创建,将Index之前占用的空间释放,重新申请空间来创建index

Reorganize 是重新组织,将index的叶子节点进行重新组织

SQL Server【提高】碎片的更多相关文章

  1. sql server mdf碎片级数据库修复,数据库碎片级提取

    sql server mdf碎片级数据库修复,数据库碎片级提取   大家都知道MDF数据库文件一般都比较大,在磁盘中往往被存放到不连续的逻辑簇中,久而久之就形成了文件碎片,当文件被误删除或者格式化后, ...

  2. SQL Server提高事务复制效率优化(一)总体概述

      随着公司业务的发展,数据量增长迅速,在解决Scale Out的同时,还要考虑到主从的复制延迟问题,尽量降到1s以内满足线上业务,如果不调整,SQL Server默认的配置可能平均要3s左右.生产的 ...

  3. SQL Server提高并发查询效率

    同事写了个程序用创建多个线程使用ado同时对同个数据库进行相同的查询,涉及2张数据表的联查.当线程数非常多的情况下,读取数据的效率就会变得很慢,例如50个线程同时查询大概3000条数据,查询完成后通过 ...

  4. SQL Server索引碎片整理实际操作记录

    SQL Server 版本是 2008 R2. 查询数据库索引碎片情况的 SQL 语句(来源): SELECT OBJECT_NAME(ind.OBJECT_ID) AS TableName, ind ...

  5. SQL Server 索引碎片产生原理重建索引和重新组织索引

    数据库存储本身是无序的,建立了聚集索引,会按照聚集索引物理顺序存入硬盘.既键值的逻辑顺序决定了表中相应行的物理顺序 多数情况下,数据库读取频率远高于写入频率,索引的存在 为了读取速度牺牲写入速度 页 ...

  6. [笔记整理]SQL Server 索引碎片 和 重建索引

    铺垫知识点: 数据库存储本身是无序的,建立了聚集索引,会按照聚集索引物理顺序存入硬盘.既键值的逻辑顺序决定了表中相应行的物理顺序 多数情况下,数据库读取频率远高于写入频率,索引的存在 为了读取速度牺牲 ...

  7. SQL Server数据库碎片整理

    碎片产生   在SQL Server中,存储数据的最小单位是页,每一页所能容纳的数据为8060字节.而页的组织方式是通过B树结构  SQL Server向每个页内存储数据的最小单位是表的行(Row)  ...

  8. SQL SERVER 索引碎片

    一次发现同样的SQL在线上库和复制库执行时间差好多,重新创建相关表索引,性能提升明显,怀疑索引有碎片

  9. SQL Server 提高执行效率的16种方法

    1.尽量不要在where中包含子查询; 关于时间的查询,尽量不要写成:where to_char(dif_date,'yyyy-mm-dd')=to_char('2007-07-01′,'yyyy-m ...

  10. SQL Server提高事务复制效率优化(四)修改数据同步过程优化

    1.原理       我说的数据修改同步过程指的是在快照生成完毕,分发代理将快照应用于订阅服务器完成订阅服务器初始化后,发布服务器后续的更改同步到订阅服务器过程,这也就是我们常常关注的延迟.此过程主要 ...

随机推荐

  1. sudo漏洞解决方案--源码转rpm包(spec文件编写)

    RPM 知识储备 将源码包打包成rpm包,一般有两种情况 在找包中,能够在网上找到 ".src.rpm" 结尾的包,并且是根据漏洞需要升级的版本的包 在找包中,没有找到 " ...

  2. loj2511

    引言 思维题. 这个做法跑得飞快,还不用 dp,也不是爆搜! 复杂度(可能)为 \(O(s^2t)\) 或 \(O(s^2)\),实际效率也是飞快. 不过这题我直接提交答案了. 思路 考虑 \(A=m ...

  3. tdlib成功编译版本20230205(java)

    tdjni是java本地调用接口dll文件夹下的三个动态链接是供tdjni调用的使用时这三个加到系统环境变量里 编译文件在本人的文件里,可以下载

  4. datagridview 标题设置背景图片

    private void dgvCaozuoList_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { if (e. ...

  5. python启动robotframework-ride失败,解决方案

    python启动robotframework-ride提示str(os.path.dirname(rf_file), 'utf-8'))).publish() UnicodeDecodeErro的解决 ...

  6. 【C学习笔记】day3-1 将数组A中的内容和数组B中的内容进行交换。(数组一样大)

    #include <stdio.h> int main() { int a[5]; for (int i = 0; i < 5; i++) { scanf_s("%d&qu ...

  7. vue数组传值到后端

    const arrays= ["zhangsan","lisi"] 请求方式:GET vue前端: getDetailList({arrays:arrays}) ...

  8. python中的上下文管理器以及python内建模块contextlib的contextmanager方法

    上下文管理器 上下文管理器是实现了上下文管理协议的对象,其特有的语法是"with -as".主要用于保存和恢复各种全局状态,关闭文件等,并为try-except-finally提供 ...

  9. Hadoop2.7.3源码编译

    一.编译源码步骤演示详解 需求:官网下载的hadoop包,执行hadoop命令时,会有警告信息,为去除此警告,需要重新编译hadoop相应版本的源码,替换hadoop安装包lib目录下的native( ...

  10. 080_Dataloader.io

    图中是之前使用的Dataloader,关于Lookup字段可以不使用ID,用ID对应的Name进行匹配,如图