当我们进行大数据量操作的时候,很想知道数据库中哪些表进行的逻辑次数最多,还有就是所有表所占空间大小,以应对表数据量过大给内存增加的负担,对于单个表如何查询所在空间大小应该是很简单的了,如果数据库中有几十个甚至几百个表的时候,单表操作的语句我估计肯定没有人愿意去用,接下来,我就来给大家说一下我所使用的批量查询数据库表所占空间大小的方法。
首页 > 大数据 > 数据分析 > 【SQL Server】实现批量查询数据库表所占空间
当我们进行大数据量操作的时候,很想知道数据库中哪些表进行的逻辑次数最多,还有就是所有表所占空间大小,以应对表数据量过大给内存增加的负担,对于单个表如何查询所在空间大小应该是很简单的了,如果数据库中有几十个甚至几百个表的时候,单表操作的语句我估计肯定没有人愿意去用,接下来,我就来给大家说一下我所使用的批量查询数据库表所占空间大小的方法。
首先来讲一下我的思路,在要批量查询的数据库中新建一个表,主要负责收集本数据库中所有表的表名,然后通过一个insert的触发器,每次向表里添加表名,都会触发这个触发器,这个触发器的作用就是每添加一条信息,就直接显示出这个表名所对应的表所占空间大小。
我们首先来创建一个数据库辅助表,当然了,这不是关键的部分,这里就省略代码了,会基本数据库操作的朋友应该都了解这个语句啦。
辅助表创建完成以后呢,说一下需求,就是我想要知道这个数据库中所有表所占的空间大小以及其他的信息,那接下来,我们就需要给AddTable这个表创建一个触发器了。
虽然看似简单的几句,可是还是需要解释一下这个触发器的构造,希望能够对新手有帮助,首先,第一行的意思就是我们创建了一个叫mytrigger的触发器,这个触发器是作用在AddTable表上的。
after insert的意思就是触发器触发的时间,就是在执行添加语句之后触发,还不理解的,直接翻译英文即可。after ...之后;insert 新增,添加。
接下来就好理解了,在之前的经验里有涉及到,定义一个varchar类型的sql参数,大小为max,然后初始化sql参数为空字符。
然后我们就利用EXECUTE执行动态语句,其实这里的“exec sp_spaceused[表名]”就是我们常用的查询单表所占空间大小的语句,这里表名所在的位置为什么是 TableName呢?或许很多人都有这个疑问,很简单,因为AddTable的列名就是TableName。
到这里,触发器就已经创建好了,就等对AddTable表进行添加操作来触发它了,接下来,我们根据之前的需求,把这个数据库中的表名查询出来,然后都添加到AddTable表中。首先我们来看一下如何查询数据库中所有的表名。语句就是:select Name from sysobjects where xtype='u'
能查询出来,那接下来,我们就进行添加,语句为:
Insert AddTable
select Name from sysobjects where xtype='u'
执行后,我们会发现,在数据库进行逻辑添加的过程中,对应的表的数据也就出来了。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22769535/viewspace-1110399/ ,如需转载,请注明出处,否则将追究法律责任。