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

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

     編輯:MySQL 資料庫相關知識

為什麼查詢優化至關重要?

在高併發的數據庫驅動應用中,一條糟糕的 SQL 能拖垮整個系統:不僅消耗大量數據庫資源,還會連帶影響其他業務組件。優化查詢性能很大程度上依賴開發者的經驗直覺,但 MySQL 內建了強大的輔助工具。本文聚焦三大核心手段:索引設計、EXPLAIN 執行計劃分析、關鍵參數調優。

#1 合理使用索引:雙刃劍的平衡術

創建索引

CREATE INDEX idx_username ON users(username);

為 WHERE 或 HAVING 條件中常用的列建立索引,可避免全表掃描,大幅提升查詢速度。每張表最多支持 16 個索引,亦支援多列索引與全文索引。

查看索引

SHOW INDEX FROM users;

索引的代價與平衡點

  • 寫入開銷: 每次 INSERT/UPDATE/DELETE 都需維護索引結構,索引過多會拖慢寫入。
  • 讀取收益: 索引太少則查詢退化為全表掃描。
  • 策略: 根據表的核心業務(讀多寫少 vs 寫多讀少)設計索引體系,而非對每列或完全不建索引。

#2 善用 EXPLAIN 解讀執行計劃

EXPLAIN 放在 SELECT 前,可輸出 MySQL 如何執行查詢、預估掃描行數、使用的索引等關鍵信息。

實戰對比

優化前:

EXPLAIN SELECT city.name, city.district
FROM city, country
WHERE city.countrycode = country.code AND country.code = 'IND';
-- city 表 type=ALL,掃描 4079 行

添加索引後:

CREATE INDEX idx_ccode ON city(countrycode);

優化後:

EXPLAIN SELECT city.name, city.district
FROM city, country
WHERE city.countrycode = country.code AND country.code = 'IND';
-- city 表 type=ref,掃描 333 行,減少 90%+

關鍵列解讀:

  • type:const > ref > range > index > ALL(越靠前越好)
  • rows:預估掃描行數,越小越好
  • key:實際使用的索引
  • Extra:Using index(覆蓋索引)、Using where、Using temporary 等提示

#3 調整關鍵內部變量

調優原則: 先觀測狀態值(SHOW GLOBAL STATUS),再小步調整,避免過度配置導致內存交換。

總結

索引是查詢加速的基石,EXPLAIN 是診斷的聽診器,參數調優是發揮硬件潛力的杠桿。三者結合,配合慢查詢日誌持續迭代,才能構建高性能的 MySQL 應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
變量作用建議值
key_buffer_size索引緩衝區大小(MyISAM 核心參數)物理內存 25% 左右
read_buffer_size全表掃描時的順序讀緩衝區視頻掃描慢則適當調大
table_cache / table_open_cache可同時打開的表數量配合 max_connections 適當調大
long_query_time慢查詢日誌閾值(秒)1~2 秒,用於定位低效 SQL