回自己一贴 , 结构我已经分析出来了 , 但是结构出来我就更困惑了 , 还望大神解答 .
按照第二版的方法 , 我对上表的 `b`,`c` 列做了索引 , 只不过我小小的改变了一下表结构 , 建表语句和随后的 INSERT 语句变成了如下 : 
CREATE TABLE `t` (
  `a` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `b` varchar(8000) DEFAULT NULL,
  `c` int(10) unsigned NOT NULL,
  PRIMARY KEY (`a`),
  KEY `idx_b_c` (`b`(255),`c`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
INSERT INTO t SELECT NULL,REPEAT('a',7000),5
INSERT INTO t SELECT NULL,REPEAT('a',7000),8
INSERT INTO t SELECT NULL,REPEAT('a',7000),6
INSERT INTO t SELECT NULL,REPEAT('a',7000),9
INSERT INTO t SELECT NULL,REPEAT('a',7000),7后使用姜大湿开发的工具 py_innodb_page_info.py 分析了 t.ibd 文件的辅助索引数据页后发现页中记录如下存放 ( 依然经我简化 ) :
ff 80 00 00 00 10 02 1e 61 61 ... 61 61 00 00 00 05 00 00 00 01
ff 80 00 00 00 18 02 1e 61 61 ... 61 61 00 00 00 08 00 00 00 02
ff 80 00 00 00 20 02 1e 61 61 ... 61 61 00 00 00 06 00 00 00 03
ff 80 00 00 00 28 fc c3 61 61 ... 61 61 00 00 00 09 00 00 00 04
ff 80 00 00 00 30 fc d3 61 61 ... 61 61 00 00 00 07 00 00 00 05至此 , 已经提取出 InnoDB 辅助索引的存储结构 , 我有 2 个疑问 ( 第三个和索引无关 , 有关字符集的问题 ) .
1 . 索引页的页记录结构也是 变长位 + NULL位标识 + 列数据 ? 如果是 , 那么应该只有一列变长数据 , 即其值为 255 ( 我数过 , 255 个 61 ... 是不是无聊了点 ? ) 那么后面的 80 是什么 ?
2 . 从结构可以看到 , 辅助索引的存储结构为   列1,列2,列x,主键值   那也就是说索引只能按列 1 进行快速查找了 ? 因为从 列2 到 列x 仅仅是带上存储在后面而已 , 并没有按照那些列值排序 .
3 . 我是 UTF-8 的字符集 , 我看了一下数据页 , varchar(7000) 的字段定义 REPEAT('a', 7000) 的值 , 而其变长列为 58 9b , 10 进制为 22683 , 这是意味着 utf-8 是一种长字符集 , 所以 7000 个英文字母实际存储需要 3 倍的字节数 ?