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

MySQL 性能優化實戰:覆蓋索引與 SQL_NO_CACHE 將查詢從 40ms 降至 30ms

     編輯:MySQL 綜合教學

MySQL 性能優化實戰:覆蓋索引與 SQL_NO_CACHE

針對單表近百萬行、高頻查詢場景,通過建立覆蓋索引消除回表操作,配合 SQL_NO_CACHE 排除緩存干擾,將平均響應時間從 40ms 降至 30ms,性能提升 25%。

場景與表結構

CREATE TABLE pics (
  id INT PRIMARY KEY AUTO_INCREMENT,
  user_id INT NOT NULL,
  picname VARCHAR(128),
  smallimg VARCHAR(128),
  INDEX idx_uid (user_id)          -- 原有單列索引
) ENGINE=InnoDB;

查詢語句:SELECT picname, smallimg FROM pics WHERE user_id = ?

優化前分析

ALTER TABLE pics ADD INDEX idx_uid_pic (user_id, picname, smallimg);

索引列順序遵循最左前綴原則:查詢條件列在前,選取列在後。

優化後驗證

-- 強制不緩存(適合實時性要求高、或低頻查詢)
SELECT SQL_NO_CACHE id, name FROM test3 WHERE id < 2;

-- 明確要求緩存(適合靜態數據、高頻查詢)
SELECT SQL_CACHE id, name FROM test3 WHERE id < 2;

需配合 query_cache_type=DEMAND 使用。

覆蓋索引擴展案例

案例 1:分頁優化(延遲關聯)

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