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.原理 我说的数据修改同步过程指的是在快照生成完毕,分发代理将快照应用于订阅服务器完成订阅服务器初始化后,发布服务器后续的更改同步到订阅服务器过程,这也就是我们常常关注的延迟.此过程主要 ...
随机推荐
- Appium的触屏操作&设备交互api
Appium的触屏操作 TouchAction---Appium 2.0以上不在可以使用 官网地址:https://github.com/appium/appium/blob/master/docs/ ...
- 两张表合并到一个VO里面
@Overridepublic List<TbRemouldAirELe> findAll() { List<TbRemouldAirELe> list = new Array ...
- Note Taking App Comparison: Notesnook vs Joplin
I have used many note-taking apps, including Notion, oneNotes, Obsidian, Sublime Text, etc. Here I w ...
- DRF过滤Filtering
过滤Filtering 对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-filter扩展来增强支持. pip install django-filter 在配置文件中增加过滤后端的 ...
- 解决windows下使用vscode没有函数提示的问题
vscode支持非常多的扩展,包括支持protobuf语法,非常方便. 笔者近期在使用vscode打开工程(文件夹)情况下,困扰于没有函数提示,例如不同路径的头文件中的函数不提示,库函数不提示,试尽各 ...
- TIM PC版 v3.4.5.22071 绿色便携版
修改历史: 2023.01.30:自改官方 3.4.5.22071 最新正式版本------------------------------------------------------------ ...
- vue页面添加锚点后 点击不改变URL
html: <a @click="changeHash('#row')"> {{ $t("msg.desc1") }} </a> j ...
- 你可能不知道的HTML小技巧 面试题小技巧
程序员面试题库分享 1.前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 2.前端技术导航大全 推荐:★★★★★ 地址:前端技术导航大全 3.开发者颜色 ...
- # huawei--流策略+NAT+单臂路由
huawei--流策略+NAT+单臂路由 项目要求: 公司内部有两个网段,分别为192.168.1.0/24和192.168.2.0/24,使用路由器R1实现单臂路由,并配置流策略,使192.168. ...
- (mysql笔记)GROUP_CONCAT() 把多行数据合并
不合并查询: 合并查询: SELECT GROUP_CONCAT(id) FROM orderinfo WHERE enterpriseid = 2265 AND shopid =0 AND orde ...