如何获得每桌的大小

时间:2011-08-29 23:42:25

标签: php mysql sql database

我有一个包含~20个表的数据库。每个表都有一列“dtLogTime”,用于记录插入行的时间。我想弄清楚每张桌子每天录制的大小(可能是kb或mb)。更具体地说,我只对最近3天感兴趣。此外,这些表格会跟踪数据,直到某个时间间隔(即2周,1个月等),这意味着我会为每天存储的新数据丢失一天的数据。

我遇到了这个代码,可以显示每个表的大小。

<?php

$link = mysql_connect('host', 'username', 'password');

$db_name = "your database name here";
$tables = array();

mysql_select_db($db_name, $link);
$result = mysql_query("SHOW TABLE STATUS");

while($row = mysql_fetch_array($result)) {
    /* We return the size in Kilobytes */
    $total_size = ($row[ "Data_length" ] + 
                   $row[ "Index_length" ]) / 1024;
    $tables[$row['Name']] = sprintf("%.2f", $total_size);
}

print_r($tables);
?>

当我尝试

"SHOW TABLE STATUS WHERE dtLogTime < '2011-08-28 00:00:00' 
AND dtLogTime >= '2011-08-27 00:00:00'" 
它给了我一个错误。有没有办法做到这一点?

由于

2 个答案:

答案 0 :(得分:0)

您需要包含LIKE子句来指定表。资料来源:http://dev.mysql.com/doc/refman/5.6/en/show-table-status.html

SHOW TABLE STATUS 
LIKE YourTable
WHERE dtLogTime < '2011-08-28 00:00:00' 
AND dtLogTime >= '2011-08-27 00:00:00'

答案 1 :(得分:0)

Where子句适用于SHOW TABLE STATUS生成的结果表,不能是各种表的实际列。例如:

SHOW TABLE STATUS where Index_length = 0

单独运行SHOW TABLE STATUS以查看可在WHERE子句中使用的所有合法列的列表。不幸的是,根据您的情况,您每天必须运行SHOW TABLE STATUS并将结果存储在某处。

<强>更新

为了澄清,SHOW TABLE STATUS是一种便捷方法,可以询问系统表INFORMATION_SCHEMA.TABLES。它会将系统表中的结果减少到当前数据库中的持久表。它不会执行任何自己的计算。