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

MySQL 索引設計八大注意事項:從創建到避坑的實戰指南

     編輯:MySQL 綜合教學

1. 必須創建索引,但拒絕過度索引

  • 查詢主導型應用索引至關重要,缺失導致全表掃描
  • 低基數欄位(如性別、狀態)建索引收益低,反拖慢寫入

2. 善用複合索引,遵循最左前綴原則

-- 查詢:WHERE area='beijing' AND age=22
-- 單列索引:每次只能用一個
-- 複合索引:(area, age) 效率最高

-- 創建 (area, age, salary) 等效於擁有:
-- (area, age, salary)、(area, age)、(area) 三個索引
-- 最常用條件列放最左,依次遞減

3. 索引不包含 NULL 值

  • 含 NULL 的列不會進入索引
  • 複合索引任一列為 NULL 導致該列對複合索引失效
  • 設計時避免預設值為 NULL,改用 NOT NULL DEFAULT '' 或 0

4. 使用短索引(前綴索引)

  • CHAR(255) 列若前 10-20 字符區分度高,僅索引前綴:INDEX idx_name (col(10))
  • 提升查詢速度、節省磁碟空間與 I/O

5. 排序與索引的關係

  • MySQL 單查詢只用一個索引
  • WHERE 用了索引,ORDER BY 列不會再用索引
  • 避免多列排序,必要時建複合索引覆蓋 WHERE + ORDER BY

6. LIKE 模糊查詢優化

  • LIKE '%aaa%':不走索引
  • LIKE 'aaa%':可走索引
  • 非必要勿用 LIKE,考慮全文索引或搜尋引擎

7. 避免在索引列上進行運算/函數

-- 錯誤:導致索引失效、全表掃描
SELECT * FROM users WHERE YEAR(adddate) < 2007;

-- 正確:改為範圍查詢
SELECT * FROM users WHERE adddate < '2007-01-01';

8. 拒絕 NOT IN 和 <> 操作

  • 均不走索引,全表掃描
  • NOT IN → NOT EXISTS 或 LEFT JOIN ... IS NULL
  • id <> 3 → id > 3 OR id < 3
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved