首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 查詢優化三板斧:索引、EXPLAIN、參數調優

     編輯:MySQL 資料庫相關知識

一、索引 — 加速查詢的基石

每表最多 16 個索引,支援多欄索引與全文索引。建立:

CREATE INDEX idx_username ON users(username);

驗證:SHOW INDEX FROM users;

雙刃劍:過多索引拖慢寫入,需在「查詢快」與「寫入快」間找平衡,依表主要業務 (讀多寫少/寫多讀少) 決策。

二、EXPLAIN — 看穿執行計畫

關鍵欄位:

  • type:system > const > eq_ref > ref > range > index > ALL (越左越好)
  • possible_keys / key:可用/實際用到的索引
  • rows:預估掃描行數 (越少越好)
  • Extra:Using index (覆蓋索引)、Using where、Using temporary、Using filesort (需優化)

實戰優化


-- 原查詢:city 表全掃 4079 行
EXPLAIN SELECT city.name, city.district
FROM city, country
WHERE city.countrycode = country.code AND country.code = 'IND';
-- type=ALL, rows=4079

-- 加索引
CREATE INDEX idx_ccode ON city(countrycode);

-- 再看:type=ref, rows=333 (降低 92%)

三、核心參數調優

參數作用建議起始值
key_buffer_size索引塊緩存 (MyISAM 關鍵)物理記憶體 25%
read_buffer_size全表掃描順序讀緩存1-2 MB
sort_buffer_sizeORDER BY/GROUP BY 排序緩存1-2 MB (Session 級可調大)
join_buffer_size無索引 JOIN 緩存1-2 MB
read_rnd_buffer_size隨機讀/排序後讀取緩存1 MB
table_cache / table_open_cache可同時開啟表數配合 max_connections 調大
long_query_time慢查詢門檻 (秒)1-2 秒 (5.1.21+ 支援微秒)
log_slow_queries開啟慢查詢日誌ON
log_queries_not_using_indexes記錄無索引查詢ON

調優流程建議

  1. 開啟慢查詢日誌,收集 Top SQL
  2. EXPLAIN 分析執行計畫,補索引、改 SQL
  3. 調整緩存參數,觀察 SHOW GLOBAL STATUS 命中率
  4. 壓測驗證,迭代調優
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved