2015-05-30 179 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';