在MySQL数据库中,创建了一个表,如下所示:
CREATE TABLE IF NOT EXISTS `sub` (
`s_id` int(3) NOT NULL AUTO_INCREMENT COMMENT 'Standard id',
`std` int(10) NOT NULL COMMENT 'Standard',
`sub_nm` varchar(25) NOT NULL COMMENT 'Subject Name',
PRIMARY KEY (`s_id`),
KEY `sub_nm` (`sub_nm`),
KEY `sub_nm_2` (`sub_nm`),
KEY `sub_nm_3` (`sub_nm`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='All Subjects with
corresponding standerds.' AUTO_INCREMENT=21 ;
我的问题是,最后三个KEY值是什么意思?我的意思是:KEY sub_nm
(sub_nm
),KEY sub_nm_2
(sub_nm
)和KEY sub_nm_3
(sub_nm
)
答案 0 :(得分:1)
KEY通常是INDEX的同义词。当在列定义中给出时,键属性PRIMARY KEY也可以被指定为KEY。这是为了与其他数据库系统兼容而实现的。
答案 1 :(得分:1)
有了这条指令
KEY sub_nm
(sub_nm
),
KEY sub_nm_2
(sub_nm
),
KEY sub_nm_3
(sub_nm
)
为sub_nm列创建3个索引,名为sun_nm,sub_nm_2和sub_nm_3
答案 2 :(得分:0)
以前的答案已经解决了KEY
和INDEX
个关键字是同义词的问题。除此之外,还有几个例子。
在创建表格时使用INDEX
或KEY
关键字创建索引
CREATE TABLE IF NOT EXISTS `sub` (
`s_id` int(3) NOT NULL AUTO_INCREMENT COMMENT 'Standard id',
`std` int(10) NOT NULL COMMENT 'Standard',
`sub_nm` varchar(25) NOT NULL COMMENT 'Subject Name',
PRIMARY KEY (`s_id`),
INDEX `sub_nm` (`sub_nm`),
INDEX `sub_nm_2` (`sub_nm`),
INDEX `sub_nm_3` (`sub_nm`)
);
在同一个字段上创建3个索引是不明智的。 sub_nm
就足够了一个索引。
创建表格后创建索引
CREATE TABLE IF NOT EXISTS `sub` (
`s_id` int(3) NOT NULL AUTO_INCREMENT COMMENT 'Standard id',
`std` int(10) NOT NULL COMMENT 'Standard',
`sub_nm` varchar(25) NOT NULL COMMENT 'Subject Name',
PRIMARY KEY (`s_id`)
);
create index sub_nm on `sub`(sub_nm);
-- create key sub_nm2 on `sub`(sub_nm); WILL ERROR OUT
alter table `sub` add index sub_nm3 (sub_nm);
alter table `sub` add key sub_nm4 (sub_nm);
请注意可以在表上创建索引的不同方法。我通常使用这样的索引名称:idx_tablename_fieldname(例如idx_sub_sub_nm)。
sub_nm上的索引可以提高在过滤,排序和分组中利用sub_nm的查询的性能。 EXPLAIN
有助于识别数据库是否认为将使用索引。如果数据库不使用您非常强烈认为应该的查询,则可以在查询中提供index hints,如下所示:
select s_id from sub use index (idx_sub_sub_nm) where sub_nm = 'test';