1. 程式人生 > 實用技巧 >MySQL索引相關操作

MySQL索引相關操作

索引是用於提高資料檢索速度的。本文主要整理一些關於索引的操作,如建立,檢視,刪除。

一、建立索引

在執行CREATE TABLE語句時可以建立索引,也可以單獨用CREATE INDEX或ALTER TABLE來為表增加索引。

(1)ALTER TABLE

ALTER TABLE用來建立普通索引、UNIQUE索引或PRIMARY KEY索引。

# 建立普通索引
ALTER TABLE table_name ADD INDEX index_name (column_list);
# 建立唯一索引
ALTER TABLE table_name ADD UNIQUE (column_list);
# 建立主鍵索引
ALTER TABLE table_name ADD PRIMARY KEY (column_list);

# 其中table_name是要增加索引的表名,column_list指出對哪些列進行索引,多列時各列之間用逗號分隔。
# 索引名index_name可選,預設時,MySQL將根據第一個索引列賦一個名稱。

(2)CREATE INDEX

CREATE INDEX 可對錶增加普通索引或UNIQUE索引。

# 建立普通索引
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索引。

二、檢視索引

以下兩條語句效果相同都是查看錶中所具有的索引:

show index from tblname;
show keys from tblname;

例如:show index from gms_goods_basic_info; 查詢結果截圖如下:

對各欄位解釋如下:

含義
Table 表的名稱。
Non_unique 如果索引不能包括重複詞,則為0。如果可以,則為1。
Key_name 索引的名稱。
Seq_in_index 索引中的列序列號,從1開始。
Column_name 列名稱。
Collation 列以什麼方式儲存在索引中。在MySQL中,有值‘A’(升序)或NULL(無分類)。
Cardinality 索引中唯一值的數目的估計值。通過執行ANALYZE TABLE或myisamchk -a可以更新。基數根據被儲存為整數的統計資料來計數,所以即使對於小型表,該值也沒有必要是精確的。基數越大,當進行聯合時,MySQL使用該索引的機會就越大。
Sub_part 如果列只是被部分地編入索引,則為被編入索引的字元的數目。如果整列被編入索引,則為NULL。
Packed 指示關鍵字如何被壓縮。如果沒有被壓縮,則為NULL。
Null 如果列含有NULL,則含有YES。如果沒有,則該列含有NO。
Index_type 用過的索引方法(BTREE, FULLTEXT, HASH, RTREE)。
Comment 註釋。
Index_comment 索引註釋。

三、刪除索引

可利用ALTER TABLE或DROP INDEX語句來刪除索引。語法如下:

# 刪除名為index_name的索引,以下兩條語句效果一樣
DROP INDEX index_name ON talbe_name;
ALTER TABLE table_name DROP INDEX index_name;

# 刪除主鍵索引
ALTER TABLE table_name DROP PRIMARY KEY;

其中,前兩條語句是等價的,刪除掉table_name中的索引index_name。

第3條語句只在刪除PRIMARY KEY索引時使用,因為一個表只可能有一個PRIMARY KEY索引,因此不需要指定索引名。如果沒有建立PRIMARY KEY索引,但表具有一個或多個UNIQUE索引,則MySQL將刪除第一個UNIQUE索引。

如果從表中刪除了某列,則索引會受到影響。對於多列組合的索引,如果刪除其中的某列,則該列也會從索引中刪除。如果刪除組成索引的所有列,則整個索引將被刪除。

參考博文:
(1) https://www.cnblogs.com/tianhuilove/archive/2011/09/05/2167795.html