Mysql——index(索引)使用

gary-liu發表於2016-09-30

索引作用

在索引列上可以有序查詢之外,資料庫利用各種各樣的快速定位技術,能夠大大提高查詢效率。而在多表連線查詢時,在執行連線時加快了與其他表中的行匹配的速度。索引可以避免排序,比如對order by 的欄位建立索引,因為索引使用的是BTree(資料作為葉子節點在樹的最底層已經排好序,這樣方便了sql的between查詢),本來就是排好序列的,所以可以避免排序達到優化查詢的效果。

新增索引

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

ALTER TABLE table_name ADD INDEX index_name (column_list)
ALTER TABLE table_name ADD UNIQUE index_name (column_list)
ALTER TABLE table_name ADD PRIMARY KEY (column_list)

建立聯合索引,各列之間用逗號分隔,聯合索引(a,b,c)相當於(a),(a,b),(a,c)

刪除索引

DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY

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

檢視索引

 show index from table_name;

Non_unique: 如果索引不能包括重複詞,則為0。如果可以,則為1。

Seq_in_index: 索引中的列序列號,從1開始。比如在組合索引中的位置

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)。

[參考資料]

MySQL索引的建立、刪除和檢視

相關文章