我想優化日常統計工作所需的索引大小,這樣我就可以減少表的大小並使日常統計工作更慢一些。如何獲得MySQL中每個索引的大小
爲了做到這一點,我想在表格中得到每個索引的大小。
"show table status from"
只顯示Index_length
這是表中所有指數的總大小。
有沒有辦法檢索表中每個標記的大小?
我想優化日常統計工作所需的索引大小,這樣我就可以減少表的大小並使日常統計工作更慢一些。如何獲得MySQL中每個索引的大小
爲了做到這一點,我想在表格中得到每個索引的大小。
"show table status from"
只顯示Index_length
這是表中所有指數的總大小。
有沒有辦法檢索表中每個標記的大小?
對於指標的選擇,你可以按照this
因此,在PHP SHOW TABLE STATUS [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]
例如:
<?php
error_reporting(E_ERROR | E_PARSE | E_COMPILE_ERROR);
$c = mysql_connect('localhost', 'user_root', 'user_root_pass');
function filesize_($size=0, $round=2){
$type = array('bytes', 'Kb', 'Mb', 'Gb', 'Tb', 'Pb');
for ($i=0; $size>1024; $size=$size/1024){$i++;}
if(empty($i)){$i='0';}
return round($size, $round).' '.$type[$i];
}
if(!$c){
echo 'mysql not found: '.__FILE__; exit;
}
$sum = array();
$sql = 'SHOW DATABASES';
if($q = mysql_query('SHOW DATABASES')){
$a = array();
while($r = mysql_fetch_row($q)){
$a[] = $r['0'];
}
foreach($a as $name){
$sql = 'error select db: '.$name;
if(@mysql_select_db($name, $c) ){
$sql = 'error SHOW TABLE STATUS: '.$name;
if($q = mysql_query('SHOW TABLE STATUS')){
while($r = mysql_fetch_assoc($q)){
$sum[ $r['Engine'] ] += $r['Index_length'];
}
}else{
echo $sql."\n";
}
}else{
echo $sql."\n";
}
}
}else{
echo 'error:'.$sql;
}
echo 'Engine indexes sum:'."\n";
foreach($sum as $engine => $count){
echo $engine."\t".filesize_($count)."\n";
}
echo 'thats all.'."\n";
查看結果腳本運行,例如:PHP this_script.php 和你得到結果:
Engine indexes sum:
MEMORY 0 bytes
MyISAM 6.84 Gb
InnoDB 416 Kb
CSV 0 bytes
thats all.
已經l在show table語句語法中使用了ooked,但似乎無法使用它獲取每個索引的大小。 – curinno
@curinno在我鏈接你的頁面中,是寫相反的....這很奇怪。 – DonCallisto