1. 概述
mssql是一款高性能的关系型数据库系统,但当数据量增大时会出现明显的系统性能问题,因此我们需要清理库来使系统性能更加稳定。清理库可以从底层优化磁盘空间的利用,提高可用存储资源的利用率,减少数据库的响应时间,缩短磁盘IO时间,提高查询处理能力。
2. 清理库的作用
库中的数据会不断增加,如果不清理,不仅会浪费存储资源,而且会影响数据库的性能。以下是清理库的作用:
2.1 释放磁盘空间
当一个表或者索引的空间超过了预设的限制,系统就会给出错误信息,并且这些数据不再能够被操作。更糟糕的是,它们占用了磁盘空间。因此清理库可用释放磁盘空间,提高存储资源的可用性。
2.2 优化数据库性能
清理库可以删除和压缩数据,能够提高数据库性能。它可以减少数据库执行查询的时间,最大程度地提高数据库的性能。
2.3 降低备份和恢复时间
清理库可以降低备份和恢复数据库的时间。它可以减少需要备份和恢复的数据量,从而减少备份数据的处理时间。更重要的是,清理库可以减少数据的响应时间,从而减少恢复的时间。
3. 清理库的步骤
清理数据库的步骤分为以下三个部分:
3.1 删除过期数据
删除过期数据是清理库的第一步,可以使用以下SQL语句:
DELETE FROM table_name
WHERE date < 'yyyy-mm-dd'
其中 table_name 是要清理的表名,date 是日期列的名称,<’yyyy-mm-dd’>指定一个日期值。它将删除在该日期之前的所有记录。
3.2 压缩表
表的压缩需要利用MSSQL内置的工具实现。以下是实现方法:
ALTER TABLE table_name REBUILD;
其中表名是你需要压缩的表名。
3.3 重建索引
索引的重建可以删除过期的索引,减少索引的碎片,使索引更加紧凑,能够提高查询的效率。可以使用以下SQL语句查询当前数据库的索引信息:
SELECT
db_name() AS databaseName
,s.name AS schemaName
,t.name AS tableName
,i.name AS indexName
,i.type_desc AS indexType
,i.is_primary_key AS isPrimaryKey
,i.create_date AS createDate
,i.modify_date AS modifyDate
FROM sys.schemas s
INNER JOIN sys.tables t ON s.schema_id = t.schema_id
INNER JOIN sys.indexes i ON t.object_id = i.object_id
WHERE s.name <> 'sys'
以上查询结果会返回所有表的索引信息,你可以通过自己的判断来确定哪些索引需要重建。以下是重建索引的实现方法:
ALTER INDEX index_name ON table_name REBUILD;
其中 index_name 是需要重建的索引名,<strong>table_name 是索引所在的表名。
4.参考资料
https://zhuanlan.zhihu.com/p/24897492
https://www.sqlshack.com/how-to-remove-sql-server-index-fragmentation/