これに対する直接的な答えは
information_schema.statistics
mysql> desc information_schema.statistics;
+---------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------+------+-----+---------+-------+
| TABLE_CATALOG | varchar(512) | NO | | | |
| TABLE_SCHEMA | varchar(64) | NO | | | |
| TABLE_NAME | varchar(64) | NO | | | |
| NON_UNIQUE | bigint(1) | NO | | 0 | |
| INDEX_SCHEMA | varchar(64) | NO | | | |
| INDEX_NAME | varchar(64) | NO | | | |
| SEQ_IN_INDEX | bigint(2) | NO | | 0 | |
| COLUMN_NAME | varchar(64) | NO | | | |
| COLLATION | varchar(1) | YES | | NULL | |
| CARDINALITY | bigint(21) | YES | | NULL | |
| SUB_PART | bigint(3) | YES | | NULL | |
| PACKED | varchar(10) | YES | | NULL | |
| NULLABLE | varchar(3) | NO | | | |
| INDEX_TYPE | varchar(16) | NO | | | |
| COMMENT | varchar(16) | YES | | NULL | |
| INDEX_COMMENT | varchar(1024) | NO | | | |
+---------------+---------------+------+-----+---------+-------+
16 rows in set (0.01 sec)
あなたはそのテーブルからSELECTできます
SELECT * FROM information_schema.statistics
WHERE table_schema='mydb' AND table_name='mytable';
または以下を実行して統計を表示します
mydb.mytableからインデックスを表示します。
このテーブルは、書き込みが多い環境では必ずしも正確ではないことに注意してください。頻繁に更新されるすべてのMyISAMテーブルに対して定期的にANALYZE TABLEを実行する必要があります。そうしないと、information_schema.statisticsに依存するMySQL Query Optimizerが、クエリのEXPLAINプランを開発する際に間違った選択をする場合があります。インデックス統計は可能な限り最新でなければなりません。
ANALYZE TABLEはInnoDBテーブルに対してまったく効果がありません。InnoDBのすべてのインデックス統計は、BTREEページへのダイブによってオンデマンドで計算されます。したがって、InnoDBテーブルに対してSHOW INDEXES FROMを実行すると、表示されるカーディナリティは常に近似値になります。
更新2011-06-21 12:17 EDT
ANALYZE TABLEを明確にするために、言い替えさせてください。InnoDBテーブルでANALYZE TABLEを実行することはまったく役に立ちません。InnoDBテーブルでANALYZE TABLEを実行した場合でも、InnoDBストレージエンジンはカーディナリティー近似のインデックスへのダイブを繰り返し実行するため、コンパイルしたばかりの統計が破壊されます。実際、PerconaはANALYZE TABLEでいくつかのテストを実行し、同様にその結論に達しました。