从https://stackoverflow.com/a/51181742/3284469
如果表没有主键或合适的唯一索引,innodb会在包含行id值的合成列上内部生成一个名为gen\u clust\u index的隐藏聚集索引。这些行是按innodb分配给这样一个表中的行的id排序的。行id是一个6字节的字段,随着新行的插入而单调增加。因此,按行id排序的行在物理上是按插入顺序排列的。
我的mysql版本是:
$ mysql --version
mysql Ver 8.0.11 for Linux on x86_64 (MySQL Community Server - GPL)
我按照那里的命令来验证内部索引是否已创建,但最后一个命令没有显示任何索引已创建。为什么?谢谢。
注意,我对上一个命令做了一点修改,因为原来的命令 Unknown table 'INNODB_INDEX_STATS' in information_schema
错误。
# Create the table
create table test.check_table (id int, description varchar(10)) ENGINE = INNODB;
# Verify that there is no primary or unique column
desc test.check_table;
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| description | varchar(10) | YES | | NULL | |
+-------------+-------------+------+-----+---------+-------+
# Insert some values
insert into test.check_table values(1, 'value-1');
insert into test.check_table values(2, 'value-2');
insert into test.check_table values(null, 'value-3');
insert into test.check_table values(4, null);
insert into test.check_table values(1, 'value-1');
# Verify table
select * from test.check_table;
+------+-------------+
| id | description |
+------+-------------+
| 1 | value-1 |
| 2 | value-2 |
| NULL | value-3 |
| 4 | NULL |
| 1 | value-1 |
+------+-------------+
# Verify that the GEN_CLUST_INDEX index is auto-created.
select * from INFORMATION_SCHEMA.INNODB_INDEX_STATS where TABLE_SCHEMA='test' and TABLE_NAME = 'check_table';
ERROR 1109 (42S02): Unknown table 'INNODB_INDEX_STATS' in information_schema
SELECT DISTINCT TABLE_NAME, COLUMN_NAME , INDEX_NAME FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME='check_table';
Empty set (0.00 sec)
2条答案
按热度按时间9udxz4iz1#
在我找到的所有mysql版本中
INNODB_INDEX_STATS
表位于mysql
数据库,不是INFORMATION_SCHEMA
. 这似乎是您引用的帖子中的错误。从sql的Angular 来看,这个索引不是一个“真正的”索引(它不会出现在
DESCRIBE
,并且不能修改或删除),因此它不会显示在中INFORMATION_SCHEMA.STATISTICS
.e5nszbig2#
对于版本8.0.11,表
innodb_index_stats
位于mysql
模式代替INFORMATION_SCHEMA
. 按照这些命令,最后一个查询给出如下结果:此外,问题中引用的post还创建了第二个表,其中指定了主键。该查询的索引验证提供: