2015-05-30 172 views
2

在MySQL数据库中,已创建表如下: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 sub_nmsub_nm),KEY sub_nm_2sub_nm)和密钥sub_nm_3sub_nm

回答

1

KEY通常是INDEX的同义词。当在列定义中给出时,键属性PRIMARY KEY也可以被指定为KEY。这是为了与其他数据库系统兼容而实现的。

For more

1

有了这个指令 KEY sub_nmsub_nm), KEY sub_nm_2sub_nm), KEY sub_nm_3sub_nm) 您创建sub_nm命名列sun_nm,sub_nm_2和sub_nm_3

3项指标
+0

什么是多索引的好处:如果数据库中没有使用查询,你非常坚信它应该index hints可以在查询这样可以提供? @Taras Soroka – user4956971

+0

通用,具有多个索引(例如... KEY ind1(column_1),KEY ind2(column2),.....),您可以索引列值的组合并加快查询速度,如 SELECT * from TABLE WHERE column1 = X AND column_2 = Y 但在你的情况下,我真的不知道为1字段创建3个索引的意思。 –

0

以前的答案已经解决了您的问题KEYINDEX关键字是syno nymous。除此之外,这里有几个例子。

表创建

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项指标中创建使用INDEXKEY关键字的索引。 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有助于确定数据库是否相信将使用索引。

select s_id from sub use index (idx_sub_sub_nm) where sub_nm = 'test';