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

MySQL 索引基礎與實戰:創建、類型、ALTER 管理與最佳實踐

     編輯:MySQL 綜合教學

索引本質

數據結構(B+樹),加速查詢、排序、分組、連接。代價:寫入(INSERT/UPDATE/DELETE)需同步維護索引,佔用磁盤空間。

創建語法

-- 唯一索引
CREATE UNIQUE INDEX idx_name ON table_name (col1, col2);

-- 普通索引
CREATE INDEX idx_name ON table_name (col1);

-- 降序索引(MySQL 8.0+)
CREATE INDEX idx_desc ON table_name (col1 DESC);

ALTER TABLE 管理索引

語句效果
ALTER TABLE tbl ADD PRIMARY KEY (cols)主鍵,非空唯一
ALTER TABLE tbl ADD UNIQUE idx_name (cols)唯一索引,允許多 NULL
ALTER TABLE tbl ADD INDEX idx_name (cols)普通索引
ALTER TABLE tbl ADD FULLTEXT idx_name (cols)全文索引(MyISAM/InnoDB 5.6+)
ALTER TABLE tbl DROP INDEX idx_name刪除索引
ALTER TABLE tbl DROP PRIMARY KEY刪除主鍵

主鍵添加實戰

SHOW INDEX FROM table_name\G

關鍵列:Key_name、Column_name、Cardinality(基數,越大選擇性越好)、Index_type(BTREE/FULLTEXT)。

索引設計黃金法則

  1. 最左前綴原則:複合索引 (a,b,c) 支持 a、a,b、a,b,c 查詢,不支持 b、c、b,c。
  2. 高選擇性優先:基數大(值分佈均勻)的列放前面。
  3. 覆蓋索引:查詢列全在索引中,避免回表(EXPLAIN 顯示 Using index)。
  4. 避免過度索引:單表建議 ≤5 個索引,寫入密集表更少。
  5. 外鍵列必建索引:InnoDB 要求被引用列有索引,引用列自動建索引。

常見失效場景

  • WHERE col LIKE '%abc%'(前導通配符)
  • WHERE func(col) = val(函數/運算作用於列)
  • 隱式類型轉換:WHERE varchar_col = 123
  • OR 連接非同一索引列
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved