你怎么能确定一个特定的MySQL表正在占用多less磁盘空间?

有一个快速的方法来确定一个特定的MySQL表正在占用多less磁盘空间? 该表可以是MyISAM或Innodb。

对于表mydb.mytable运行这个:

BYTES

 SELECT (data_length+index_length) tablesize FROM information_schema.tables WHERE table_schema='mydb' and table_name='mytable'; 

KILOBYTES

 SELECT (data_length+index_length)/power(1024,1) tablesize_kb FROM information_schema.tables WHERE table_schema='mydb' and table_name='mytable'; 

MEGABYTES

 SELECT (data_length+index_length)/power(1024,2) tablesize_mb FROM information_schema.tables WHERE table_schema='mydb' and table_name='mytable'; 

GIGABYTES

 SELECT (data_length+index_length)/power(1024,3) tablesize_gb FROM information_schema.tables WHERE table_schema='mydb' and table_name='mytable'; 

GENERIC

这是一个通用查询,其中最大单位显示是TB(TeraBytes)

 SELECT CONCAT(FORMAT(DAT/POWER(1024,pw1),2),' ',SUBSTR(units,pw1*2+1,2)) DATSIZE, CONCAT(FORMAT(NDX/POWER(1024,pw2),2),' ',SUBSTR(units,pw2*2+1,2)) NDXSIZE, CONCAT(FORMAT(TBL/POWER(1024,pw3),2),' ',SUBSTR(units,pw3*2+1,2)) TBLSIZE FROM ( SELECT DAT,NDX,TBL,IF(px>4,4,px) pw1,IF(py>4,4,py) pw2,IF(pz>4,4,pz) pw3 FROM ( SELECT data_length DAT,index_length NDX,data_length+index_length TBL, FLOOR(LOG(IF(data_length=0,1,data_length))/LOG(1024)) px, FLOOR(LOG(IF(index_length=0,1,index_length))/LOG(1024)) py, FLOOR(LOG(IF(data_length+index_length=0,1,data_length+index_length))/LOG(1024)) pz FROM information_schema.tables WHERE table_schema='mydb' AND table_name='mytable' ) AA ) A,(SELECT 'B KBMBGBTB' units) B; 

试一试 !!!

这对于InnoDB表格来说是不准确的。 磁盘上的大小实际上大于通过查询报告的大小。

请参阅Percona链接了解更多信息。

http://www.mysqlperformanceblog.com/2008/12/16/how-much-space-does-empty-innodb-table-take/

SQL的一小部分,以MB的前20名最大的表。

 SELECT table_schema, table_name, ROUND((data_length+index_length)/POWER(1024,2),2) AS tablesize_mb FROM information_schema.tables ORDER BY tablesize_mb DESC LIMIT 20; 

希望对别人有用!

在linux下用默认安装的mysql:

 [you@yourbox]$ ls -lha /var/lib/mysql/<databasename> 

基于NIXCRAFT的mysql数据库位置

基于RolandMySQLDBA的答案,我想我们可以使用上面的来获取表中每个模式的大小:

 SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb FROM information_schema.tables GROUP BY table_schema; 

真的很喜欢它!

你也许可以看看文件的大小…

每个表都存储在一个名为你所谓的数据库的文件夹内的几个单独的文件中。 这些文件夹存储在mysql数据目录中。

从那里你可以做一个'du -sh。*'来获得磁盘上表的大小。

从如何检查我的数据库正在使用多less磁盘空间?

您可以通过在控制面板中查看phpMyAdmin来检查MySQL表大小,方法是单击左侧框架中的数据库名称,然后在右侧框架中读取表中的表格大小。

下面的查询将有助于获取相同的bytes信息

 select SUM(data_length) + SUM(index_length) as total_size from information_schema.tables where table_schema = 'db_name' and table_name='table_name'; 

我将只使用' mysqldiskusage '工具如下

 $ mysqldiskusage --server=user:password@localhost mydbname # Source on localhost: ... connected. # Database totals: +------------+----------------+ | db_name | total | +------------+----------------+ | mydbaname | 5,403,033,600 | +------------+----------------+ Total database disk usage = 5,403,033,600 bytes or 5.03 GB