-
Notifications
You must be signed in to change notification settings - Fork 111
INNODB_SYS_INDEXES
xiaoboluo768 edited this page Jun 7, 2020
·
2 revisions
- 该表提供查询有关InnoDB索引的元数据信息,等同于InnoDB数据字典内部SYS_INDEXES表中的信息
- 该表为memory引擎临时表,查询该表的用户需要具有process权限
- 表定义语句
CREATE TEMPORARY TABLE `INNODB_SYS_INDEXES` (
`INDEX_ID` bigint(21) unsigned NOT NULL DEFAULT '0',
`NAME` varchar(193) NOT NULL DEFAULT '',
`TABLE_ID` bigint(21) unsigned NOT NULL DEFAULT '0',
`TYPE` int(11) NOT NULL DEFAULT '0',
`N_FIELDS` int(11) NOT NULL DEFAULT '0',
`PAGE_NO` int(11) NOT NULL DEFAULT '0',
`SPACE` int(11) NOT NULL DEFAULT '0',
`MERGE_THRESHOLD` int(11) NOT NULL DEFAULT '0'
) ENGINE=MEMORY DEFAULT CHARSET=utf8
- 表字段含义
- INDEX_ID:索引ID,在实例中的所有数据库中唯一
- NAME:索引名称。索引名称可以在创建时指定,如果不指定InnoDB将隐含地创建名称与列名一致的索引,但索引名称在整个实例中不一定是唯一的(但在每个表中需要唯一)。例如:PRIMARY用于主键索引、GEN_CLUST_INDEX用于表示未指定主键时innodb隐式创建的一个主键索引、以及ID_IND,FOR_IND和REF_IND用于外键约束等
- TABLE_ID:表示与索引关联的表ID,该字段值与INNODB_SYS_TABLES.TABLE_ID的字段值相同
- TYPE:表示索引类型的数字ID,0 =二级索引、1 =集群索引、2 =唯一索引、3 =主键索引、32 =全文索引、64 =空间索引、128 =包含虚拟生成列的二级索引
- N_FIELDS:索引key中的列数量。对于GEN_CLUST_INDEX索引(innodb隐式创建的主键),此字段值为0,因为该索引是使用伪造的列值而非实际表列创建的
- PAGE_NO:索引B-tree的根页编号。对于全文索引,PAGE_NO字段未使用且设置为-1(FIL_NULL),因为全文索引中的数据被分散在多个B树(辅助表)中
- SPACE:索引所在表空间ID。0表示InnoDB系统表空间。任何其他非0数字都表示使用了独立的表空间且具有独立的.ibd文件的表。该ID值在执行TRUNCATE TABLE语句后保持不变。由于一个表中存在着多个索引,所以在该表中该列值不一定是唯一的
- MERGE_THRESHOLD:索引页的合并阈值。如果索引页面中的数据量在发生删除行或发生更新操作缩短行长度之后,整个索引页中的实际数据长度与页大小的比例降至MERGE_THRESHOLD值以下,InnoDB会尝试合并索引页与相邻索引页。默认阈值是50%
- 表记录内容示例
admin@localhost : information_schema 06:39:20> select * from INNODB_SYS_INDEXES limit 1\G;
*************************** 1. row ***************************
INDEX_ID: 11
NAME: ID_IND
TABLE_ID: 11
TYPE: 3
N_FIELDS: 1
PAGE_NO: 45
SPACE: 0
MERGE_THRESHOLD: 50
1 row in set (0.00 sec)
- 验证、测试、整理:罗小波
- QQ:309969177
- 提示:本系列文章的主体结构遵循Oracle MySQL 官方 5.7 手册中,关于information_schema、mysql schema、performance_schema、sys schema的章节结构体系,并额外添加了一些验证、测试数据。鉴于本人精力和能力有限,难免出现一些纰漏,欢迎大家踊跃指正!