mysql查询表的数据量 - navicat查看表大小




如何获取mysql数据库表的大小? (8)

我可以运行这个查询来获取mysql数据库中所有表的大小:

show table status from myDatabaseName;

我希望在理解结果方面有所帮助。 我正在寻找最大尺寸的桌子。

我应该看哪一列?


下面是使用bash命令行解决这个问题的另一种方法。

for i in mysql -NB -e 'show databases' ; do echo $i; mysql -e "SELECT table_name AS 'Tables', round(((data_length+index_length)/1024/1024),2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema =\"$i\" ORDER BY (data_length + index_length) DESC" ; done


从ChapMic的答案改编成适合我的特殊需求。

只需指定数据库名称,然后按降序对所有表格进行排序 - 从选定数据库中的LARGEST到SMALLEST表格。 只需要替换1个变量=您的数据库名称。

SELECT 
table_name AS `Table`, 
round(((data_length + index_length) / 1024 / 1024), 2) AS `size`
FROM information_schema.TABLES 
WHERE table_schema = "YOUR_DATABASE_NAME_HERE"
ORDER BY size DESC;

假设你的数据库名称是“news_alert”。 然后这个查询将显示数据库中所有表的大小。

所有表格的大小:

SELECT
  TABLE_NAME AS `Table`,
  ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Size (MB)`
FROM
  information_schema.TABLES
WHERE
  TABLE_SCHEMA = "news_alert"
ORDER BY
  (DATA_LENGTH + INDEX_LENGTH)
DESC;

输出:

    +---------+-----------+
    | Table   | Size (MB) |
    +---------+-----------+
    | news    |      0.08 |
    | keyword |      0.02 |
    +---------+-----------+
    2 rows in set (0.00 sec)

对于特定的表格:

SELECT
  TABLE_NAME AS `Table`,
  ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Size (MB)`
FROM
  information_schema.TABLES
WHERE
    TABLE_SCHEMA = "news_alert"
  AND
    TABLE_NAME = "news"
ORDER BY
  (DATA_LENGTH + INDEX_LENGTH)
DESC;

输出:

+-------+-----------+
| Table | Size (MB) |
+-------+-----------+
| news  |      0.08 |
+-------+-----------+
1 row in set (0.00 sec)

如果您使用的是phpmyadmin,那么只需转到表结构

例如

Space usage
Data    1.5 MiB
Index   0   B
Total   1.5 Mi

如果您有ssh访问权限,那么您可能只需简单地尝试du -hc /var/lib/mysql (或者在my.cnf设置不同的datadir )。


尝试以下shell命令(将DB_NAME替换为数据库名称):

mysql -uroot <<<"SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"DB_NAME\" ORDER BY (data_length + index_length) DESC;" | head

对于Drupal / drush解决方案,请检查以下示例脚本,它将显示正在使用的最大表格:

#!/bin/sh
DB_NAME=$(drush status --fields=db-name --field-labels=0 | tr -d '\r\n ')
drush sqlq "SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"${DB_NAME}\" ORDER BY (data_length + index_length) DESC;" | head -n20

显示行数和占用空间的数量以及排序的另一种方式。

SELECT
     table_schema as `Database`,
     table_name AS `Table`,
     table_rows AS "Quant of Rows",
     round(((data_length + index_length) / 1024 / 1024/ 1024), 2) `Size in GB`
FROM information_schema.TABLES
WHERE table_schema = 'yourDatabaseName'
ORDER BY (data_length + index_length) DESC;  

您必须在此查询中替换的唯一字符串是“yourDatabaseName”。


SELECT 
    table_name AS "Table",  
    round(((data_length + index_length) / 1024 / 1024), 2) as size   
FROM information_schema.TABLES  
WHERE table_schema = "YOUR_DATABASE_NAME"  
ORDER BY size DESC; 

这种排列的大小(DB大小以MB为单位)。







mysql