本文復盤一個真實生產優化案例:單表近百萬行、高頻單表查詢,通過建立覆蓋索引將平均響應時間從 40ms 降至 30ms,性能提升 25%,並深度解析 Using index 執行計劃含義。
pics:存儲用戶圖片信息,約 100 萬行user_id、picname、smallimgSELECT picname, smallimg FROM pics WHERE user_id = ?idx_uid (user_id)idx_uidExtra 為空 → 需回表獲取 picname、smallimgEXPLAIN SELECT SQL_NO_CACHE picname, smallimg FROM pics WHERE user_id=17853; -- type=ref, key=idx_uid_pic, Extra=Using index -- 10 次平均 30ms

idx_uid_picExtra=Using index → 覆蓋索引生效,無回表(picname, user_id))將導致索引失效SELECT *,覆蓋索引無效(除非索引包含所有列,不現實)