热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Sqlserver(优化Sqlserver数据库)页分裂和填充因子

页分裂概念不管是聚集索引还是非聚集索引我们在插入数据后难免的会对数据增删改那么我们涉及到一个问题我们建立的索引会因为数据的变动而变得混乱比如下面聚集索引如果我insert了

页分裂 概念

不管是聚集索引 还是非聚集索引 

我们在插入数据后 难免的会对数据增删改 那么我们涉及到一个问题 

我们建立的索引会因为数据的变动 而变得混乱

比如 下面 聚集索引 如果我insert 了100条O 和P开头的数据  page120 存不下了 数据行满了 只能新建一个131页 来存储 

这时候 每一次查询 数据差120页的时候 会跳到131页 查完在跳回来130页 这样 数据操作多了  数据查询也就卡了 因为它不连续了 它会到处去跳页查询 这就是页分裂

当然非聚集也是一个到底 不过它跳转的索引页

那么怎么看数据页分裂情况那?

DBCC showcontig(表名,索引名)

我们看一下

日语的是我们公司现用的数据量最多的表  汉语的是拿来翻译的

首先我没看

扫描页数: 就是数据表一共存储数据用了多少了页 34099页

扫描区 :就是存储页用了多少个区 8页为一个区 用了4349个区

每个区平均页数 是7.8 这个就是每个区平均多少页

扫描的密度:如果页都是连着的是 就100% 咱的是是12.50 % 越低说明查询数据的时候跳转的越频繁

逻辑扫描碎片: 99.24 就是页分裂 已经达到了 99.24% 基本到处都是碎页

区碎片 :区之间跳转为62% 区也是不连续的



解决

碎片整理

DBCC indexdefrag(数据库名,表名,索引名)

执行以下

扫描 33281页 移动 23776 移出10237 我们再看一下数据

数据都很好了~ 扫描的密度 达到99% 那么查询起来就很快了

定期整理索引  是一个好习惯



填充因子

还有一个办法就是定期重建索引 并增加填充因子

填充因子的概念就是 因为数据增删改 会引起页裂变  那么原因是页被数据占满了 在创建的时候就满了

那么我们在创建页的时候 能不能给位置预留出来 这样数据插入的时候就会降低页分裂

图里是预留了百分之50  这样的话 页会增多 以前50页能存满的数据要 100页

怎么创建填充因子那

语句

Create nonclustered index non_name on TS(name)
with drop_existing,fillfactor = 65

这样 打个比方 如果一个库一直在增删改 一个月要整理一次索引 用了创建索引和填充因子 至少3个月不用整理


推荐阅读
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • MongoDB集群配置:副本集与分片详解
    本文详细介绍了如何在MongoDB中配置副本集(Replica Sets)和分片(Sharding),并提供了具体的步骤和命令,帮助读者理解并实现高可用性和水平扩展的MongoDB集群。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
author-avatar
处男是你_909
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有