萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 表結構與索引管理實戰:增刪欄位、前綴索引、全文索引、多欄索引最左原理與 SHOW INDEX 解讀

欄位與表級操作

-- 新增欄位
ALTER TABLE tbl ADD col_name datatype;

-- 修改欄位
ALTER TABLE tbl CHANGE old_name new_name datatype;
ALTER TABLE tbl MODIFY col_name new_datatype;

-- 刪除欄位
ALTER TABLE tbl DROP COLUMN col_name;

-- 查看表結構
DESC tbl;  -- 或 SHOW COLUMNS FROM tbl;

索引建立與刪除

-- 普通索引
ALTER TABLE employee ADD INDEX emp_name (name);

-- 主鍵
ALTER TABLE employee ADD PRIMARY KEY (id);

-- 唯一索引
ALTER TABLE employee ADD UNIQUE emp_card (card_number);

-- 前綴索引(BLOB/TEXT/長 VARCHAR 必須)
CREATE TABLE test (blob_col BLOB, INDEX idx_prefix (blob_col(10)));

-- 刪除索引
ALTER TABLE employee DROP INDEX emp_name;

查看索引資訊

SHOW INDEX FROM employee;
-- 或
SHOW KEYS FROM employee;

關鍵欄位:Key_name、Seq_in_index、Column_name、Cardinality(基數)、Sub_part(前綴長度)、Index_type(BTREE/FULLTEXT)。

全文索引

  • 僅 MyISAM(5.6 前)與 InnoDB(5.6+)支援。
  • 僅適用 CHAR/VARCHAR/TEXT。
  • 整欄索引,不支援前綴。
  • 語法:ALTER TABLE articles ADD FULLTEXT idx_content (content);
  • 查詢:SELECT * FROM articles WHERE MATCH(content) AGAINST('keyword');

多欄(複合)索引最左前綴原理

索引 INDEX name (last_name, first_name) 等同於排序陣列:

查詢條件使用索引說明
WHERE last_name='W'✅最左欄位
WHERE last_name='W' AND first_name='M'✅最左兩欄
WHERE first_name='M'❌非最左
WHERE last_name='W' OR first_name='M'❌OR 導致全掃

索引設計黃金法則

  1. 單表索引數量建議 ≤ 5,過多拖慢寫入。
  2. 複合索引欄位順序:WHERE 等值 > WHERE 範圍 > ORDER BY > GROUP BY。
  3. 高選擇性欄位前置,低選擇性(性別、狀態)後置或不建索引。
  4. 覆蓋索引:SELECT a,b FROM t WHERE c=1 配合 INDEX(c,a,b) 避免回表。
  5. 定期 ANALYZE TABLE 更新統計資訊,確保優化器決策準確。
copyright © 萬盛學電腦網 all rights reserved