查看sqlserver表格占用空间大小

alexlee 2022-11-7 387 11/7

做项目的时候,由于本地数据库,太老了,没有最新的数据,这也就导致,有些情况,我们无法模拟出来,无法从根本上解决问题。

这也就出现了,我们需要经常进行导库的情况了。那什么是导库,那就是把生产环境的数据,导入到我们这边的开发环境。

这样就可以将数据维度还原一致,帮助我们开发更好的判断问题的所在。

在介绍背景后,我们就来介绍跟还原下导入数据库所发现的问题如下:

导入数据库,但是发现导出来的库竟然有二十几个G,那我们本地的硬盘可能没有办法,导入这么大的数据库,

那遇到这些问题的时候,我们要怎么办,我们就试着不导入这些库里边的所有数据,适当的将数据删除,最后得到这个最小的库。

这时候,可能会有疑问,就是正式库的数据可以随便删除吗?

我们这里的库是生产环境里边的测试数据库,所以数据是可以随便删除的。

在我们删除数据之前,我们要排查哪些表的数据过大,从而对该表的数据进行删除,所以要排查下哪些表占用空间过大.

这里有的人可能会凭借经验来判断,但是,有时候判断不准确,并且也浪费我们的时间,最好的方法是用语句进行排查。

CREATE PROCEDURE [dbo].[P_UpdateTableSpaceInfo]
AS
BEGIN
    --查询是否存在结果存储表
    IF NOT EXISTS (SELECT * FROM sysobjects where id = OBJECT_ID(N'temp_tableSpaceInfo')
                      AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
    BEGIN
        --不存在则创建
        CREATE TABLE temp_tableSpaceInfo
        (name NVARCHAR(128),
        rows char(11),
        reserved VARCHAR(18),
        data VARCHAR(18),
        index_size VARCHAR(18),
        unused VARCHAR(18))
    END
    --清空数据表
    DELETE FROM temp_tableSpaceInfo
    --定义临时变量在遍历时存储表名称
    DECLARE @tablename VARCHAR(255)
    --使用游标读取数据库内所有表表名
    DECLARE table_list_cursor CURSOR FOR
    SELECT name FROM sysobjects
    WHERE OBJECTPROPERTY(id, N'IsTable') = 1 AND name NOT LIKE N'#%%' ORDER BY name
    --打开游标
    OPEN table_list_cursor
    --读取第一条数据
    FETCH NEXT FROM table_list_cursor INTO @tablename
    --遍历查询到的表名
    WHILE @@FETCH_STATUS = 0
    BEGIN
        --检查当前表是否为用户表
        IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(@tablename)
                      AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
        BEGIN
            --当前表则读取其信息插入到表格中
            EXECUTE sp_executesql N'INSERT INTO temp_tableSpaceInfo
            EXEC sp_spaceused @tbname', N'@tbname varchar(255)', @tbname = @tablename
        END
        --读取下一条数据
        FETCH NEXT FROM table_list_cursor INTO @tablename
    END
    --释放游标
    CLOSE table_list_cursor
    DEALLOCATE table_list_cursor
END
GO
EXEC P_UpdateTableSpaceInfo
SELECT * FROM temp_tableSpaceInfo where rows>10000
2.0 通过以上语句,我们可以查出哪些表格的数据过多,从而有选择性的进行删除,让导出来的数据库容量变小。
以下是大于10W条数据的,可以选择性删除用不到的数据.
查看sqlserver表格占用空间大小

以上是自己的做为资深开发的一些个人经历,把这些经验分享给大家,希望以后大家在从事开发中,可以避免不必要的麻烦,跟浪费时间精力。

要是大家喜欢我的文章的话,可以在文章下留言或是联系我,共同进步,共同探讨开发的一些案例,促进彼此间的交流,分享一些日常的开发趣事。

- THE END -
最后修改:2024年7月22日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论