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

MySQL 查詢表索引命令詳解:SHOW INDEX 與字段含義完全指南

     編輯:MySQL 綜合教學

掌握 SHOW INDEX(或 SHOW KEYS)輸出各列含義,是索引分析、優化與治理的基礎技能。本文逐列拆解官方輸出字段,並給出實戰解讀技巧。

一、 兩條等價命令

SHOW INDEX FROM `tbl_name`;
SHOW KEYS FROM `tbl_name`;

二、 輸出字段完整解讀

列名含義實戰解讀要點
Table表名確認對象表
Non_unique0=唯一索引/主鍵,1=普通索引快速區分主鍵、唯一、普通索引
Key_name索引名(主鍵固定為 PRIMARY)命名規範檢查:建議 idx_表名_字段名
Seq_in_index索引內列序號(從 1 開始)聯合索引列順序驗證,最左前綴原則依賴此順序
Column_name列名確認覆蓋索引包含的列
CollationA=升序,NULL=無排序(如 Hash 索引)B+ 樹索引固定為 A
Cardinality索引基數(唯一值估計數)核心指標:基數/行數 越接近 1 選擇性越高;
定期 ANALYZE TABLE 更新統計信息
Sub_part前綴索引長度(字節),NULL=全列長文本/Blob 必須指定前綴長度;檢查是否截斷導致選擇性下降
Packed壓縮方式,NULL=無壓縮InnoDB 不壓縮索引,通常為 NULL
NullYES=允許 NULL,NO=不允許含 NULL 列的索引在某些場景下選擇性較低
Index_typeBTREE / FULLTEXT / HASH / RTREEInnoDB 僅支持 BTREE/FULLTEXT;確認引擎匹配
Comment備註信息如 disabled、parser 等額外屬性

三、 實戰常用查詢模板

-- 1. 查看某表所有索引基數與選擇性
SELECT 
  INDEX_NAME,
  COLUMN_NAME,
  CARDINALITY,
  ROUND(CARDINALITY / (SELECT TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tbl_name'), 4) AS selectivity
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='tbl_name'
ORDER BY SEQ_IN_INDEX;

-- 2. 找出未被使用的索引(需配合 sys.schema_unused_indexes 視圖,MySQL 5.7+)
SELECT * FROM sys.schema_unused_indexes WHERE object_schema=DATABASE();

四、 避坑提醒

  • Cardinality 是估計值:小表可能不準,大表需 ANALYZE TABLE 刷新。
  • 前綴索引 Sub_part 單位是字節:utf8mb4 字符佔 4 字節,varchar(100) 前綴 10 字符應設 40。
  • 主鍵永遠叫 PRIMARY:不可重命名,Non_unique=0、Null=NO。

熟練讀懂 SHOW INDEX,能讓索引優化從「盲目試錯」變為「數據驅動決策」。

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