1. 程式人生 > >學習筆記--mysql索引(一) 索引使用,index,key,primary key, unique

學習筆記--mysql索引(一) 索引使用,index,key,primary key, unique

所有MySQL列型別都可以被索引,對相關列使用索引是ᨀ高SELECT操作效能的最佳途
徑。根據儲存引擎可以定義每個表的最大索引數和最大索引長度,MyISAM和InnoDB 儲存引擎的表預設建立的都是BTREE索引,支援字首索引,即對索引欄位的前N個字元建立索引。MyISAM儲存引擎支援FULLTEXT索引,並且只限於CHAR、VARCHAR和TEXT列,預設情況下,MEMORY儲存引擎使用HASH索引,但也支援BTREE索引。

建立索引有3種方式,第一種是建表的時候確定,比如:
CREATE TABLE lx_test.address (
address_id smallint(5) unsigned NOT NULL AUTO_INCREMENT,
address

varchar(50) NOT NULL,
address2 varchar(50) DEFAULT NULL,
district varchar(20) NOT NULL,
city_id smallint(5) unsigned NOT NULL,
postal_code varchar(10) DEFAULT NULL,
phone varchar(20) NOT NULL,
last_update timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (address_id
),
KEY idx_city_id (city_id),
UNIQUE idx_postal_code (postal_code),
INDEX idx_phone (phone)
) ENGINE=InnoDB AUTO_INCREMENT=606 DEFAULT CHARSET=utf8

這裡用了4個關鍵字index,key,primary key, unique,看看分別什麼效果,首先是primary key:
這裡寫圖片描述
可看到這裡的primary key自動建立了一個名字為PRIMARY的索引,由於表引擎是InnoDB,所以索引型別為B樹索引,並且增加了唯一性約束。

那麼UNIQUE關鍵字就是建立了增加了唯一性約束的索引,KEY關鍵字和INDEX關鍵字在建表時使用則是一個效果。可見,index, key, primary key, unique,都表示索引,只是primary key表示主鍵索引(固定索引名,unique, 主鍵唯一性約束),unique表示增加了unique的索引,而index和key的語義相同。

除了在建表時建立索引外,還可以通過修改表語法來建立索引:
ALTER TABLE lx_test.address ADD KEY idx_address2 (address2);
語法和建立表時一樣。

還有一種寫法:
create INDEX idx_district on lx_test.address (district);
不過這種寫法不支援unique和key關鍵字。

刪除索引,使用drop關鍵字即可。