我有这张桌子
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我的管理员在索引部分我可以看到:
我需要“课程”专栏的聚集索引。因为使用此列有很多读取查询。
第二个问题:那么,“课程”列是聚簇索引列还是非聚集索引列?
答案 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
允许上述内容成功。 (因为人工智能必须是一把钥匙,但除非它是最左边的,否则它不能埋在复合材料中。)