在 MySQL 資料庫管理中,SHOW INDEX 是一個極為實用的指令,能讓我們快速掌握資料表的索引架構與狀態。無論是進行效能調校、排查查詢緩慢問題,還是設計資料庫結構時,這個指令都是不可或缺的利器。
SHOW INDEX FROM tbl_name [FROM db_name]
也可以使用 db_name.tbl_name 格式,兩者效果相同:
SHOW INDEX FROM mytable FROM mydb;
SHOW INDEX FROM mydb.mytable;
執行 SHOW INDEX 後,會回傳以下關鍵欄位,每個欄位都蘊含重要的索引資訊:
| 欄位名稱 | 說明 |
|---|---|
| Table | 資料表名稱 |
| Non_unique | 0 表示唯一索引(不允許重複值),1 表示允許重複值 |
| Key_name | 索引名稱,主鍵通常為 PRIMARY |
| Seq_in_index | 索引中的欄位順序,從 1 開始遞增 |
| Column_name | 被索引的欄位名稱 |
| Collation | 索引排序方式:'A' 為升序,NULL 表示無排序 |
| Cardinality | 索引中唯一值的估計數量,基數越大,MySQL 越傾向使用該索引進行聯結 |
| Sub_part | 部分索引的字元數,完整索引則為 NULL |
| Packed | 索引壓縮方式,未壓縮則為 NULL |
| Null | YES 表示欄位可包含 NULL,NO 表示不可 |
| Index_type | 索引類型:BTREE、FULLTEXT、HASH、RTREE 等 |
| Comment | 額外備註資訊 |
SHOW KEYS 是 SHOW INDEX 的同義詞mysqlshow -k db_name tbl_name 也可列舉表索引Cardinality 評估索引選擇性,決定是否需要重建索引執行 ANALYZE TABLE 或 myisamchk -a 可更新 Cardinality 統計資訊,確保查詢優化器擁有最新的統計數據以做出最佳執行計畫決策。
另外,SHOW INNODB STATUS 在 MySQL 5.1 中是 SHOW ENGINE INNODB STATUS 的同義詞(但已不建議使用),可提供 InnoDB 存儲引擎的詳細運行狀態,包括鎖、事務、緩衝池等資訊,配合索引分析使用效果更佳。