首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 查看表索引命令 SHOW INDEX / SHOW KEYS 完整輸出欄位解讀

     編輯:MySQL 綜合教學

前言

SHOW INDEX FROM tbl_name(或 SHOW KEYS)是檢視表索引結構的標準指令。輸出包含 13 個欄位,每個都蘊含關鍵資訊。本文逐欄詳細解讀,並附上索引建立/刪除速查,幫助你快速診斷索引健康度。

指令與輸出範例


mysql> SHOW INDEX FROM t_order\G
*************************** 1. row ***************************
        Table: t_order
   Non_unique: 0
     Key_name: PRIMARY
 Seq_in_index: 1
  Column_name: id
    Collation: A
  Cardinality: 1000000
     Sub_part: NULL
       Packed: NULL
         Null: NO
   Index_type: BTREE
      Comment: 
*************************** 2. row ***************************
        Table: t_order
   Non_unique: 1
     Key_name: idx_user_status
 Seq_in_index: 1
  Column_name: user_id
    Collation: A
  Cardinality: 50000
     Sub_part: NULL
       Packed: NULL
         Null: NO
   Index_type: BTREE
      Comment: 
*************************** 3. row ***************************
        Table: t_order
   Non_unique: 1
     Key_name: idx_user_status
 Seq_in_index: 2
  Column_name: status
    Collation: A
  Cardinality: 1000000
     Sub_part: NULL
       Packed: NULL
         Null: NO
   Index_type: BTREE
      Comment: 

13 個欄位深度解讀

欄位含義關鍵判讀
Table表名稱確認正確表
Non_unique0=唯一索引/主鍵,1=普通索引檢查唯一約束是否生效
Key_name索引名稱(主鍵固定為 PRIMARY)命名規範:idx_前綴普通、uk_前綴唯一
Seq_in_index索引內欄位順序(1 起)驗證聯合索引欄位順序是否符合最左前綴
Column_name欄位名稱核對欄位拼寫
CollationA=升序,NULL=無排序(Hash 索引)B+Tree 固定為 A
Cardinality不重複值估算(基數)核心指標:越大選擇性越高,優化器越傾向用索引。需定期 ANALYZE TABLE 更新
Sub_part前綴索引長度(位元組),NULL=全欄位VARCHAR(100) 索引前 10 字符 → Sub_part=10(utf8mb4 實際 30-40 bytes)
Packed關鍵字壓縮方式,NULL=無MyISAM 專屬,InnoDB 不壓縮
NullYES=允許 NULL,NO=不允許主鍵/唯一索引欄位應為 NO
Index_typeBTREE, FULLTEXT, HASH, RTREEInnoDB 僅 BTREE/FULLTEXT/SPATIAL
Comment備註(如 index comment、parser 名稱)輔助文檔

實戰判讀清單

  1. 是否有預期索引?缺索引 → ALTER TABLE ADD INDEX。
  2. Cardinality 是否準確?偏低 → ANALYZE TABLE 更新統計。
  3. 聯合索引欄位順序正確?Seq_in_index 驗證最左前綴。
  4. 是否有冗餘/重複索引?如 idx_a + idx_a_b,前者可刪。
  5. 前綴索引長度合理?Sub_part 過短 → 選擇性差;過長 → 佔空間。建議取區分度 > 90% 的最小長度。
  6. 是否有未使用索引?配合 sys.schema_unused_indexes (MySQL 5.7+ sys schema) 發現。

附:索引建立與刪除速查

建立


-- ALTER TABLE(可批次)
ALTER TABLE t ADD INDEX idx_a (a);
ALTER TABLE t ADD UNIQUE uk_b (b);
ALTER TABLE t ADD PRIMARY KEY (id);

-- CREATE INDEX
CREATE INDEX idx_c ON t (c);
CREATE UNIQUE INDEX uk_d ON t (d);

刪除


ALTER TABLE t DROP INDEX idx_a;
ALTER TABLE t DROP PRIMARY KEY;
DROP INDEX idx_a ON t;

總結

SHOW INDEX 輸出是索引健康檢查的「驗血報告」。重點關注 **Cardinality(選擇性)、Seq_in_index(最左前綴)、Sub_part(前綴長度)、Non_unique(唯一性)**。定期 ANALYZE TABLE 更新統計,配合 sys.schema_unused_indexes 清理冗餘,保持索引精簡高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved