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

MySQL 索引類型完整解析:普通、唯一、主鍵、組合索引

     編輯:MySQL 綜合教學

前言

索引是資料庫效能調校的核心。MySQL 主要支援四大類索引:普通索引、唯一索引、主鍵索引、組合索引。本文將逐一說明其特性、建立語法與適用場景,助您做出最佳選擇。

1. 普通索引

最基本的索引類型,無任何限制,允許重複值與 NULL 值。

建立方式

-- 單獨建立
CREATE INDEX idx_username ON mytable(username(10));

-- ALTER TABLE 新增
ALTER TABLE mytable ADD INDEX idx_username (username(10));

-- 建表時指定
CREATE TABLE mytable (
  ID INT NOT NULL,
  username VARCHAR(16) NOT NULL,
  INDEX idx_username (username(10))
);

刪除索引

DROP INDEX idx_username ON mytable;

提示:CHAR/VARCHAR 可指定前綴長度;BLOB/TEXT 必須指定長度。

2. 唯一索引

索引欄位值必須唯一,但允許 NULL 值 (多筆 NULL 視為不重複)。組合唯一索引則要求欄位組合唯一。

建立方式

CREATE UNIQUE INDEX uk_email ON mytable(email(20));
ALTER TABLE mytable ADD UNIQUE uk_email (email(20));
CREATE TABLE mytable (
  ID INT NOT NULL,
  email VARCHAR(100) NOT NULL,
  UNIQUE uk_email (email(20))
);

3. 主鍵索引

特殊的唯一索引:不允許 NULL、一張表僅能有一個。通常在建表時同步建立。

建立方式

CREATE TABLE mytable (
  ID INT NOT NULL,
  username VARCHAR(16) NOT NULL,
  PRIMARY KEY (ID)
);

-- 或事後新增
ALTER TABLE mytable ADD PRIMARY KEY (ID);

4. 組合索引

將多個欄位組合成單一索引,遵循最左前綴原則。例如 INDEX idx_a_b_c (a, b, c) 等同於擁有 (a)、(a,b)、(a,b,c) 三個索引。

建立範例

ALTER TABLE mytable ADD INDEX idx_name_city_age (name(10), city, age);

查詢 WHERE name='A' AND city='B' 可用到索引;WHERE city='B' 則無法使用。

索引選擇建議

  • 頻繁出現在 WHERE、JOIN、ORDER BY 的欄位優先建索引。
  • 高選擇性 (唯一值多) 的欄位效果最好;低選擇性 (如性別) 建索引效益低。
  • 組合索引將最常用的過濾欄位放最左邊。
  • 避免過度索引:每新增一個索引,INSERT/UPDATE/DELETE 都會額外維護成本。

延伸閱讀

  • 實現 ADO 連接 MySQL 的完整指南
  • 教您如何建立 MySQL 預存程序
  • MySQL 觸發器使用教學與三個範例
  • MySQL 聚合函數入門
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved