索引類型

首先請查看不一樣引擎支持的索引類型:存儲引擎簡介 。html

彙集索引和非彙集索引概念見:彙集索引與非彙集索引 和 彙集索引 。 覆蓋索引見:覆蓋索引 。post

1. InnoDB的每個表都會有一個彙集索引(第一索引,主鍵索引)。InnoDB按照主鍵進行彙集,若是沒有定義主鍵,InnoDB會試着使用惟一的非空索引來代替。若是沒有這種索引,InnoDB就會定義隱藏的主鍵而後在上面進行彙集。url

2. InnoDB不支持非主鍵的彙集索引,默認在主鍵上創建彙集索引(由於有了主鍵就有了索引,大量insert速度會變慢?先disable主鍵再insert?)。若是想在某列創建彙集索引,那麼只能將該列設爲主鍵。spa

3. 彙集索引採用B+Tree。其餘索引不採用B+Tree。若是其餘索引使用B-Tree,則葉子節點中存儲的數據爲主鍵,即先用B-Tree找到該列所屬的主鍵(存儲在葉子節點上),再主鍵經過B+Tree找到該行中全部所需數據(叫作回表?)。htm

4. B-Tree是索引和數據不一樣文件存儲?應該都是存儲在同一文件中。blog

5. 彙集的覆蓋索引默認存在。非彙集覆蓋索引的創建須要查詢列包含在主鍵中(組合主鍵,非最左),並對查詢列創建索引。索引

 

 建立索引語法以下:
    CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [USING index_type]
    ON tbl_name (index_col_name,...)
    index_col_name:
    col_name [(length)] [ASC | DESC]
 
索引的存儲類型目前只有兩種(btree和hash),具體和表的模式相關:
    myisam     btree
    innodb      btree
    memory/heap hash,btreeget

 

1. hash

alter table table_name add index index_name (column_list) ;       普通索引it

alter table table_name add unique (column_list) ;                          惟一索引

alter table table_name add primary key (column_list) ;                  主鍵索引

其中包括普通索引、UNIQUE索引和PRIMARY KEY索引3種建立索引的格式,table_name是要增長索引的表名,column_list指出對哪些列進行索引,多列時各列之間用逗號分隔。索引名index_name可選,缺省時,MySQL將根據第一個索引列賦一個名稱。

2.

create index index_name on table_name (column_list) ;

create unique index index_name on table_name (column_list) ;

說明:table_name、index_name和column_list具備與ALTER TABLE語句中相同的含義,索引名不可選。另外,不能用CREATE INDEX語句建立PRIMARY KEY索引。

 

3. 刪除索引

drop index index_name on table_name ;

alter table table_name drop index index_name ;

alter table table_name drop primary key ;

其中,在前面的兩條語句中,都刪除了table_name中的索引index_name。而在最後一條語句中,只在刪除PRIMARY KEY索引中使用,由於一個表只可能有一個PRIMARY KEY索引,所以不須要指定索引名。若是沒有建立PRIMARY KEY索引,但表具備一個或多個UNIQUE索引,則MySQL將刪除第一個UNIQUE索引。

相關文章
相關標籤/搜索