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

MySQL 常用 Hint 優化指南:強制索引、忽略索引、查詢緩衝控制等

     編輯:MySQL 綜合教學

MySQL Hint 簡介

類似 Oracle Hint,MySQL 提供多種提示語法影響優化器行為,適用於 SQL 調優場景。

常用 Hint 速查表

Hint語法範例用途
FORCE INDEXSELECT * FROM t FORCE INDEX (idx_col) WHERE col = 1;強制使用指定索引
IGNORE INDEXSELECT * FROM t IGNORE INDEX (idx_a, idx_b) WHERE a = 1;禁止使用指定索引
USE INDEXSELECT * FROM t USE INDEX (idx_c) WHERE c = 1;建議使用指定索引(優化器仍可拒絕)
SQL_NO_CACHESELECT SQL_NO_CACHE * FROM t WHERE id = 1;不使用/不存入 Query Cache
SQL_CACHESELECT SQL_CACHE * FROM t WHERE id = 1;明確使用 Query Cache(需 query_cache_type=2)
HIGH_PRIORITYSELECT HIGH_PRIORITY * FROM t;提升 SELECT/INSERT 優先級
LOW_PRIORITYINSERT LOW_PRIORITY INTO t VALUES (...);降低 INSERT/UPDATE 優先級,等待讀取完成
DELAYEDINSERT DELAYED INTO t VALUES (...);客戶端立即返回,資料寫入記憶體隊列批次寫入
STRAIGHT_JOINSELECT * FROM t1 STRAIGHT_JOIN t2 ON t1.id = t2.id;強制按書寫順序 Join(左表驅動右表)
SQL_BUFFER_RESULTSELECT SQL_BUFFER_RESULT * FROM t WHERE ...;結果集寫入臨時表,快速釋放表鎖
SQL_BIG_RESULTSELECT SQL_BIG_RESULT col, COUNT(*) FROM t GROUP BY col;提示結果集大,使用磁盤臨時表排序
SQL_SMALL_RESULTSELECT SQL_SMALL_RESULT col, COUNT(*) FROM t GROUP BY col;提示結果集小,使用記憶體臨時表

使用場景與注意事項

FORCE INDEX / IGNORE INDEX

  • 優化器選錯索引導致全表掃描時,可強制指定。
  • 索引名需存在,否則報錯。
  • 慎用:資料分布變化可能導致強制索引反而變慢。

SQL_NO_CACHE / SQL_CACHE

  • 即時性要求高、低頻查詢(如報表、統計)加 SQL_NO_CACHE。
  • query_cache_type=2 時,只有加 SQL_CACHE 才會緩存。

HIGH_PRIORITY / LOW_PRIORITY

  • HIGH_PRIORITY SELECT 會跳過等待表鎖,適合即時儀表板查詢。
  • LOW_PRIORITY INSERT 等待所有讀取釋放鎖後才寫入,適合非即時日誌寫入。

INSERT DELAYED

  • MyISAM/MEMORY/ARCHIVE 支援;InnoDB 5.6+ 已棄用(改用批次 INSERT 或 LOAD DATA)。
  • 優點:合併多客戶端寫入、客戶端不阻塞。缺點:無法取得自增 ID、崩潰可能丟資料。

STRAIGHT_JOIN

  • 當優化器選擇錯誤驅動表(如大表驅動小表)時使用。
  • 等同於在 SELECT 後加 STRAIGHT_JOIN 或在 FROM 子句中調整表順序並加 Hint。

SQL_BUFFER_RESULT / SQL_BIG_RESULT

  • 大結果集查詢(導出、報表)加 SQL_BUFFER_RESULT,快速釋放鎖,避免長時間阻塞其他查詢。
  • GROUP BY/DISTINCT 可能產生大臨時表時加 SQL_BIG_RESULT 強制用磁盤臨時表,防止記憶體不足。

Hint 只是建議,優化器在特定條件下仍可能忽略。生產環境使用前務必在測試環境驗證執行計畫(EXPLAIN)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved