在某个视频里面看到说
如果有主键,会为主键生成聚簇索引;
如果没有主键但有 unique index ,会使用 unique index 作为聚簇索引
如果以上都没有,就会自动用 row id 作为聚簇索引
但是也有完全没有任何索引的表吧?
比如我自己试了下,一个表如果没有主键也没有 unique index ,不会自动用 row id 创建聚簇索引
create table table_without_primary_key(
name varchar(30) not null ,
date datetime not null
);
insert into table_without_primary_key
values ('jack',now());
insert into table_without_primary_key
values ('alice',now());
insert into table_without_primary_key
values ('ribbon',now());
show index from table_without_primary_key;
结果显示没有任何 index ,并不是自动用 row id 创建了聚簇索引
如果此时为 date 创建一个索引,然后查询所有索引,也没看到有聚簇索引(一个问题是这个索引的叶子结点是什么内容呢?如果没有聚簇索引,那也没法回表查询了)
create index time_index
on table_without_primary_key (date);
show index from table_without_primary_key;
+---------------------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------------------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| table_without_primary_key | 1 | time_index | 1 | date | A | 2 | NULL | NULL | | BTREE | | | YES | NULL |
+---------------------------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
1 row in set (0.02 sec)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.