我有一个包含~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'"
它给了我一个错误。有没有办法做到这一点?
由于
答案 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
。它会将系统表中的结果减少到当前数据库中的持久表。它不会执行任何自己的计算。