cmd查看mysql大小_关于查看MSSQL 数据库 用户每个表 占用的空间大小

news/2024/7/7 15:52:24 标签: cmd查看mysql大小

最近做项目需要查看数据用户表的大小,包括记录条数和占用的磁盘空间数目。在网上找了很久其中查看MSSQL数据库每个表占用的空间大小 相对还可以。

不过它的2、3中方法返回的数据比较多,有些是我们不关心的数据,我在AdventureWorks2012数据上做的测试。其中第二种方法代码如下:

View Code

if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tablespaceinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

create table tablespaceinfo --创建结果存储表

(nameinfo varchar(50) ,

rowsinfo int , reserved varchar(20) ,

datainfo varchar(20) ,

index_size varchar(20) ,

unused varchar(20) )

delete from tablespaceinfo --清空数据表

declare @tablename varchar(255) --表名称

declare @cmdsql varchar(500)

DECLARE Info_cursor CURSOR FOR

select o.name

from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsTable') = 1

and o.name not like N'#%%' order by o.name

OPEN Info_cursor

FETCH NEXT FROM Info_cursor

INTO @tablename

WHILE @@FETCH_STATUS = 0

BEGIN

if exists (select * from dbo.sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1)

execute sp_executesql

N'insert into tablespaceinfo exec sp_spaceused @tbname',

N'@tbname varchar(255)',

@tbname = @tablename

FETCH NEXT FROM Info_cursor

INTO @tablename

END

CLOSE Info_cursor

DEALLOCATE Info_cursor

GO

--itlearner注:显示数据库信息

sp_spaceused @updateusage = 'TRUE'

--itlearner注:显示表信息

select *

from tablespaceinfo

order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc

运行效果如图:

a10b5828559e80504bfbecbff7cfd9ec.png 

很显然这个返回结果是错误的。但是它提供了一种思路,修改后的SQL语句如下:

View Code

IF NOT EXISTS ( SELECT  *

FROM    sys.tables

WHERE   name = 'tablespaceinfo' )

BEGIN

CREATE TABLE tablespaceinfo --创建结果存储表

(

Table_Name VARCHAR(50) ,

Rows_Count INT ,

reserved INT ,

datainfo INT ,

index_size INT ,

unused INT

)

END

DELETE  FROM tablespaceinfo

--清空数据表

CREATE TABLE #temp --创建结果存储表

(

nameinfo VARCHAR(50) ,

rowsinfo INT ,

reserved VARCHAR(20) ,

datainfo VARCHAR(20) ,

index_size VARCHAR(20) ,

unused VARCHAR(20)

)

DECLARE @tablename VARCHAR(255)

--表名称

DECLARE @cmdsql NVARCHAR(500)

DECLARE Info_cursor CURSOR

FOR

SELECT  '[' + TABLE_SCHEMA + '].[' + TABLE_NAME + ']' AS Table_Name

FROM    [INFORMATION_SCHEMA].[TABLES]

WHERE   TABLE_TYPE = 'BASE TABLE'

AND TABLE_NAME <> 'tablespaceinfo'

OPEN Info_cursor

FETCH NEXT FROM Info_cursor

INTO @tablename

WHILE @@FETCH_STATUS = 0

BEGIN

SET @cmdsql = 'insert into #temp exec sp_spaceused ''' + @tablename

+ ''''

EXECUTE sp_executesql @cmdsql

FETCH NEXT FROM Info_cursor

INTO @tablename

END

CLOSE Info_cursor

DEALLOCATE Info_cursor

GO

--itlearner注:显示数据库信息

--sp_spaceused @updateusage = 'TRUE'

--itlearner注:显示表信息

UPDATE  #temp

SET     reserved = REPLACE(reserved, 'KB', '') ,

datainfo = REPLACE(datainfo, 'KB', '') ,

index_size = REPLACE(index_size, 'KB', '') ,

unused = REPLACE(unused, 'KB', '')

INSERT  INTO dbo.tablespaceinfo

SELECT  nameinfo ,

CAST(rowsinfo AS INT) ,

CAST(reserved AS INT) ,

CAST(datainfo AS INT) ,

CAST(index_size AS INT) ,

CAST(unused AS INT)

FROM    #temp

DROP TABLE #temp

SELECT  Table_Name ,

Rows_Count ,

CASE WHEN reserved > 1024

THEN CAST(reserved / 1024 AS VARCHAR(10)) + 'Mb'

ELSE CAST(reserved AS VARCHAR(10)) + 'KB'

END AS Data_And_Index_Reserved ,

CASE WHEN datainfo > 1024

THEN CAST(datainfo / 1024 AS VARCHAR(10)) + 'Mb'

ELSE CAST(datainfo AS VARCHAR(10)) + 'KB'

END AS Used ,

CASE WHEN Index_size > 1024

THEN CAST(index_size / 1024 AS VARCHAR(10)) + 'Mb'

ELSE CAST(index_size AS VARCHAR(10)) + 'KB'

END AS index_size ,

CASE WHEN unused > 1024 THEN CAST(unused / 1024 AS VARCHAR(10)) + 'Mb'

ELSE CAST(unused AS VARCHAR(10)) + 'KB'

END AS unused

FROM    dbo.tablespaceinfo

ORDER BY reserved DESC

运行结果如图:

02e7147739f2f26e371761f5b164baa4.png

同时他的第三种方法返回的数据太多,很多是我们不怎么关心的,原SQL语句如下:

View Code

SELECT  OBJECT_NAME(id) tablename ,

* reserved / 1024 reserved ,

RTRIM(8 * dpages / 1024) + 'Mb' used ,

* ( reserved - dpages ) / 1024 unused ,

* dpages / 1024 - rows / 1024 * minlen / 1024 free ,

rows

FROM    sysindexes

WHERE   indid = 1

ORDER BY reserved DESC

运行结果如图:

b9b3dc1d9bb1e193c1d0b78dcf871727.png

这里面包含一些索引信息,其实我们只关心表占用磁盘信息,修改后的SQL语句如下:

View Code

SELECT  OBJECT_NAME(id) tablename ,

CASE WHEN reserved * 8 > 1024 THEN RTRIM(8 * reserved / 1024) + 'MB'

ELSE RTRIM(reserved * 8) + 'KB'

END DataReserve ,

CASE WHEN dpages * 8 > 1024 THEN RTRIM(8 * dpages / 1024) + 'MB'

ELSE RTRIM(dpages * 8) + 'KB'

END Used ,

CASE WHEN 8 * ( reserved - dpages ) > 1024

THEN RTRIM(8 * ( reserved - dpages ) / 1024) + 'MB'

ELSE RTRIM(8 * ( reserved - dpages )) + 'KB'

END unused ,

CASE WHEN ( 8 * dpages / 1024 - rows / 1024 * minlen / 1024 ) > 1024

THEN RTRIM(( 8 * dpages / 1024 - rows / 1024 * minlen / 1024 )

/ 1024) + 'MB'

ELSE RTRIM(( 8 * dpages / 1024 - rows / 1024 * minlen / 1024 ))

+ 'KB'

END FREE ,

rows AS Rows_Count

FROM    sys.sysindexes

WHERE   indid = 1

AND status = 2066 -- status='18'

ORDER BY reserved DESC

运行结果如下:

af78720bffb42bc20b9201355c9ec059.png

有不对的地方欢迎大家拍砖!


http://www.niftyadmin.cn/n/1406187.html

相关文章

mysql 建表优化_mysql优化1:建表原则

建表三大原则&#xff1a;定长和变长分离常用字段和不常用字段分离使用冗余字段或冗余表1、定长与变长分离如 id int&#xff0c;占4个字节&#xff0c;char(4)占4个字符长度&#xff0c;也是定长&#xff0c;time即每一个单元值占的字节是固定的。在磁盘上查找时&#xff0c;由…

JAVA中的时间操作

经常看见jsp版里有人问时间操作的问题&#xff0c;这些问题一般包括&#xff1a;取当前时间&#xff0c;把一个指定的字符串时间转化成时间类型&#xff0c;求两个时间之间的天数&#xff0c;求一段时间以前的时间&#xff0c;求一段时间以后的时间&#xff0c;在这里就把这些问…

CentOS 5.1下跑Mono和Asp.net的实现方法

由于想研究在linux下跑.net程序的可行性&#xff0c;于是尝试在CentOS5.1下搭建Mono环境和Asp.Net的服务器。Asp.Net的服务器是采用mod_mono和Apache的方式搭建&#xff08;Nginx的搭建尚未研究&#xff09;。 下载编译环境&#xff1a; yum install gcc bison pkgconfig gli…

mysql在两值之间_在MySQL的两个列值之间选择一个特定值?

让我们首先创建一个表-mysql> create table DemoTable787 (Score1 int,Score2 int,Name varchar(100));使用插入命令在表中插入一些记录-mysql> insert into DemoTable787 values(34,56,Chris);mysql> insert into DemoTable787 values(73,86,Robert);mysql> inser…

JSP彩色验证码

<% page contentType"image/jpeg" import"java.awt.*, java.awt.image.*,java.util.*,javax.imageio.*" %> <%! Color getRandColor(int fc,int bc){//给定范围获得随机颜色 Random random new Random(); if(fc>255) fc255; if(bc>2…

Centos6.0下安装mono 4.0和Jexus 5.6.4,并配置运行网站

很多朋友想要在Linux下部署asp.net的网站&#xff0c;但是又苦于不懂配置环境。今天&#xff0c;我在这里给大家讲解一下如何在Centos 7.0下安装最新版的mono 4.0.0 Jexus 5.6.4&#xff0c;并配置运行网站。 首先用ssh连接linux机器&#xff0c;登录root账号。在这里直接用我…

华夫饼为什么不松软_华夫饼自己在家做,不加泡打粉,松软又可口,操作简单,一学就会...

华夫饼自己在家做&#xff0c;不加泡打粉&#xff0c;松软又可口&#xff0c;操作简单&#xff0c;一学就会下面就将具体制作做法同大家一起分享一下吧&#xff0c;喜欢的小伙伴们可以一起动手做起来喽&#xff0c;自己制作的不仅是不加任何添加剂&#xff0c;而且吃起来健康还…

java方法的设计_Java程序的方法设计

Java程序的方法设计本文关键字&#xff1a;Java、方法定义、方法设计、方法调用、方法重载一、方法的定义我们在学习Java编程以后接触到的第一个程序就是"Hello World”&#xff0c;在这当中涉及到两个主要的结构&#xff1a;类和main方法&#xff0c;当时我们只是说明了m…