テーブルに付与されているインデックスの数を調べる

次はこれを知りたいのです。以下のようなhandler::index_type関数があるのですが、ここで投げるkey_numberを調べるには、というお話。

const char *index_type(uint key_number);

とりあえずTABLEオブジェクトを取得したら、以下を辿ってget。

uint nkeys = table->s->keys

sはTABLE_SHARE型のポインタ。名前から推測するに、frmファイルのオブジェクトなのではと思ふ。一つのテーブルに対してTABLEオブジェクトはmysqldプロセス内で複数生成されうるが、TABLE_SHAREは各テーブルにつき1つ、みたいな使い方なのではと、妄想。

補足:keysでは、複合キーの場合も1ずつカウントしています。インデックスが張られている延べカラム数は、key_partsに格納されているようです。