針對單表近百萬行、高頻查詢場景,通過建立覆蓋索引消除回表操作,配合 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 使用。