如何获取MySQL中每个索引的大小

如何获取MySQL中每个索引的大小,mysql,Mysql,我正试图优化每日统计工作所必需的索引大小,这样我就可以减少表的大小,并使每日统计工作变慢 为了做到这一点,我想得到表中每个索引的大小 “显示表格状态自”仅显示索引长度,它是表格中所有索引的总大小 是否有方法检索表中每个标记的大小?对于索引选择,您可以按照 所以,SHOW TABLE STATUS[{FROM|IN}db_name] [如'pattern'| WHERE expr]对于索引选择,您可以按照 所以,SHOW TABLE STATUS[{FROM|IN}db_name] [如'patt

我正试图优化每日统计工作所必需的索引大小,这样我就可以减少表的大小,并使每日统计工作变慢

为了做到这一点,我想得到表中每个索引的大小

“显示表格状态自”
仅显示
索引长度
,它是表格中所有索引的总大小


是否有方法检索表中每个标记的大小?

对于索引选择,您可以按照

所以,
SHOW TABLE STATUS[{FROM|IN}db_name]

[如'pattern'| WHERE expr]

对于索引选择,您可以按照

所以,
SHOW TABLE STATUS[{FROM|IN}db_name]
[如'pattern'| WHERE expr]

php示例:

<?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的示例:

<?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";

已经查看了show table语句语法,但它似乎无法获得每个索引的大小。@curinno在我链接的页面中,写的是相反的。。。。这很奇怪。我们已经看过show table语句语法,但它似乎无法获得每个索引的大小。@curinno在我链接的页面中,写的是相反的。。。。这很奇怪。