テーブルに付与されているインデックスの数を調べる
次はこれを知りたいのです。以下のような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に格納されているようです。