如何识别列是聚簇索引还是非聚簇?

时间:2016-09-05 07:31:17

标签: mysql

我有这张桌子

CREATE TABLE question2 (
   question_id INT(10) not null auto_increment,
   lesson INT(10) not null,
   questionNum INT(10) not null,
   question varchar(60) not null,
   answer varchar(60) not null,
   primary key (question_id) )
   CHARACTER SET=utf8 ENGINE=InnoDB

第一个问题:由于我有一个主键列,这是否意味着我不能拥有另一个聚集索引?

我写这个命令

ALTER TABLE `question2` ADD INDEX( `lesson`);

现在show create table看起来像这样:

question2 | CREATE TABLE `question2` (
`question_id` int(10) NOT NULL AUTO_INCR
`lesson` int(10) NOT NULL,
`questionNum` int(10) NOT NULL,
`question` varchar(60) NOT NULL,
`answer` varchar(60) NOT NULL,
PRIMARY KEY (`question_id`),
KEY `lesson` (`lesson`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

在php我的管理员在索引部分我可以看到:

enter image description here

我需要“课程”专栏的聚集索引。因为使用此列有很多读取查询。

第二个问题:那么,“课程”列是聚簇索引列还是非聚集索引列?

1 个答案:

答案 0 :(得分:1)

您只能对表进行1次物理排序(群集)。你可以有大量的二级索引。因此,相应地选择您的主键。如果你有一个auto_inc,它必须是一个键(innodb不需要PRIMARY)。

show indexes from myTableName;

将显示主索引的PRIMARY(Key_name列)。

InnoDB中允许以下内容用于auto_increment列:

create table t9
(   col1 int not null primary key,
    col2 int auto_increment,
    key `key099` (col2)
)engine=InnoDB;

注意:auto_increment列不是主键,可以通过

显示
show indexes from t9;

但它必须是一把钥匙。

create table t10
(   col1 varchar(20) primary key,
    col2 datetime not null,
    col3 int auto_increment,
    key `key101` (col2,col3),
    key `key102` (col3)
)engine=InnoDB;

key102允许上述内容成功。 (因为人工智能必须是一把钥匙,但除非它是最左边的,否则它不能埋在复合材料中。)

How does InnoDB behave without a Primary Key?