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

MySQL 效能優化核心:索引原理、類型選擇與實戰避坑指南

     編輯:MySQL 綜合教學

為何索引是優化首選?

索引是加速查詢最有效工具。無索引時 MySQL 掃描全表(O(N)),有索引則快速定位(O(log N)),百萬行資料可快 100 倍以上。優化優先順序:先建索引,再調其他。

單表查詢中的索引效應

以 student 表為例,查詢 english < 60:

  • 無索引:全表掃描每一列比對。
  • 建立 INDEX(english):索引檔依分數排序,掃描至 66 即可停止,僅讀 5 筆符合列 + 1 筆邊界列。
  • 結果自動按索引鍵排序輸出。

多表連接查詢的索引威力

三表 t1, t2, t3 各 1,000 行,連接查詢:

  • 無索引:笛卡兒積 10 億組合,極慢。
  • 有索引:掃描 t1(1,000 行),利用 t2、t3 索引直接跳轉匹配行,快百萬倍。

多欄索引(複合索引)設計原則

  • 建立 INDEX(col1, col2) 可支援 WHERE col1=... AND col2=... 及 WHERE col1=...(最左前綴原則)。
  • 若查詢 WHERE col2=... 或 WHERE col2=... AND col3=...,無法使用 (col1,col2,col3) 索引,因非最左前綴。
  • 分開單欄索引時,優化器選擇選擇性最高(過濾行最少)者。

LIKE 查詢與索引的關係

其他索引使用條件

  • 比較運算子:=, >, >=, <, <=, BETWEEN 可用索引。
  • IS NULL 於索引欄位可用索引。
  • 多欄索引需在 WHERE 所有 AND 層級使用最左前綴才會被採用。

常見錯誤 WHERE 範例

-- 使用索引
WHERE index_part1=1 AND index_part2=2
WHERE index=1 OR index=2   -- 優化器轉換為 index IN (1,2)

-- 不使用索引
WHERE index_part2=1 AND index_part3=2  -- 缺最左欄位
WHERE index=1 OR A=10                  -- 無索引跨越所有行
WHERE index_part1=1 OR index_part2=10  -- OR 導致全掃描

實戰建議

  1. 依查詢模式建立複合索引,遵循最左前綴。
  2. 2. 避免在索引欄位上使用函數或運算(如 WHERE YEAR(date_col)=2023),改用範圍查詢。 3. 定期 ANALYZE TABLE 更新統計資訊,協助優化器決策。 4. 監控 Handler_read_key / Handler_read_rnd_next 比值評估索引命中率。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
模式是否用索引說明
LIKE 'Patrick%'✅常數前綴,範圍掃描
LIKE 'Pat%_ck%'✅前綴常數
LIKE '%Patrick%'❌前導萬用字元
LIKE other_col❌非常數