MySQL SHOW INDEX 詳解

本文主要講解一下mysql show index 的語法,以 show index from bbs_posts 爲例,先看下執行效果如圖

1、Table   表名

2、Non_unique  如果索引不能包括重複值則爲0,如果可以則爲1。也就是平時所說的唯一索引。

3、Key_name  索引名稱,如果名字相同則表明是同一個索引,而並不是重複,比如上圖中的第二、三條數據,索引名稱都是index_fID_lastTime,其實是一個聯合索引。

4、Seq_in_index 索引中的列序列號,從1開始。上圖中的二、三條數據,Seq_in_index一個是1一個是2,就是表明在聯合索引中的順序,我們就能推斷出聯合索引中索引的前後順序。

5、Column_name 索引的列名。

6、Collation  列以什麼方式存儲在索引中,大概意思就是字符序。在MySQLSHOW INDEX語法中,有值’A’(升序)或NULL(無分類)。默認的類型是utf8_general_ci,這樣的大小寫不敏感,比如下面兩個sql會出現相同的查詢結果:

      select * from Table where content = 'Yes'
      select * from Table where content = 'yes'

    這樣可能不符合你的要求,你需要大小寫敏感的情況,你可以修改字段字符集類型,如下sql

    alter table bbs_posts modify column content varchar(5000) NOT NULL collate utf8_bin;

    這樣修改以後就OK了。

7、Cardinality  基數的意思,表示索引中唯一值的數目的估計值。基數根據被存儲爲整數的統計數據來計數,所以即使對於小型表,該值也沒有必要是精確的。基數越大,當進行聯合時,MySQL使用該索引的機會就越大。我們知道某個字段的重複值越少越適合建索引,所以我們一般都是根據Cardinality來判斷索引是否具有高選擇性,如果這個值非常小,那就需要重新評估這個字段是否適合建立索引。因爲MySQL數據庫中有各種不同的存儲引擎,而每種存儲引擎對於B+樹索引的實現又各不相同。所以對Cardinality統計時放在存儲引擎層進行的,至於它是如何統計更新的在這裏就不再做更深入的介紹了。

8、Sub_part 前置索引的意思,如果列只是被部分地編入索引,則爲被編入索引的字符的數目。如果整列被編入索引,則爲NULL。如上圖所示,除了index_content那行顯示4外,其他的都是NULL,表明index_content是一個長度爲4的前置索引。對於BLOB,TEXT,或者很長的VARCHAR類型的列,必須使用前綴索引,因爲MySQL不允許索引這些列的完整長度,這會讓索引變得大且慢。選擇長度的訣竅在於要選擇足夠長的前綴以保證較高的選擇性,同時又不能太長以便節約空間。下面是計算前置索引長度的一般方法:    

      select count(distinct left(content,3))/count(*) from bbs_posts as sel3

      select count(distinct left(content,4))/count(*) from bbs_posts as sel4

      select count(distinct left(content,5))/count(*) from bbs_posts as sel5

     最後算出來那個長度的基數接近完整列的選擇行就OK了,完整列 select count(distinct content)/count(*) from bbs_posts

9、Packed  指示關鍵字如何被壓縮。如果沒有被壓縮,則爲NULL。壓縮一般包括壓縮傳輸協議、壓縮列解決方案和壓縮表解決方案。

10、Null 如果列含有NULL,則含有YES。比如上圖中的lastOperateTime其中就包含null,我們知道建立索引的列是不允許爲Null的,單列索引不存Null值,複合索引不存全爲Null的值,如果列允許爲Null,可能會得到“不符合預期”的結果集。我這裏是爲了更好的給大家展示故意構造了一些數據。

11、Index_type 索引類型,Mysql目前主要有以下幾種索引類型:FULLTEXT,HASH,BTREE,RTREE。    

    1). FULLTEXT
    即爲全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不過目前只有 CHAR、VARCHAR ,TEXT 列上可以創建全文索引。全文索引並不是和MyISAM一起誕生的,它的出現是爲了解決WHERE name LIKE “%word%"這類針對文本的模糊查詢效率較低的問題。
    2). HASH
    由於HASH的唯一(幾乎100%的唯一)及類似鍵值對的形式,很適合作爲索引。    HASH索引可以一次定位,不需要像樹形索引那樣逐層查找,因此具有極高的效率。但是,這種高效是有條件的,即只在“=”和“in”條件下高效,對於範圍查詢、排序及組合索引仍然效率不高。
    3). BTREE    BTREE索引就是一種將索引值按一定的算法,存入一個樹形的數據結構中(二叉樹),每次查詢都是從樹的入口root開始,依次遍歷node,獲取leaf。這是MySQL裏默認和最常用的索引類型。
    4). RTREE
    RTREE在MySQL很少使用,僅支持geometry數據類型,支持該類型的存儲引擎只有MyISAM、BDb、InnoDb、NDb、Archive幾種。相對於BTREE,RTREE的優勢在於範圍查找。

12、 Comment Index_comment  註釋的意思。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章