# Query_time: 70.472013 Lock_time: 0.000078 Rows_sent: 7915203 Rows_examined: 15984089
SELECT ss_id, ss_sa_id, ss_si_id, ss_av_zid, ss_av_fid, ss_artno,
ss_av_zvalue, ss_av_fvalue, ss_av_zpic, ss_av_fpic, ss_number,
ss_sales, ss_cprice, ss_price, ss_stock, ss_orderid, ss_status,
ss_add_time, ss_lastmodify
FROM js_sgoods_sku
WHERE ss_si_id = 0 AND ss_status > 0
ORDER BY ss_orderid DESC, ss_av_fid ASC;
單次查詢 70 秒,掃描 1600 萬行,返回 790 萬行,傳輸 1.2GB 數據。
EXPLAIN 结果: type=ref, possible_keys=ss_si_id, key=ss_si_id, key_len=4, ref=const, rows=9516091, Extra=Using where; Using filesort
雖用到索引 ss_si_id (ss_si_id, ss_av_zid, ss_av_fid),但掃描行數極大,且需 filesort。
SHOW INDEX FROM js_sgoods_sku: Key_name=ss_si_id, Column_name=ss_si_id, Cardinality=1,551,779 Key_name=PRIMARY, Column_name=ss_id, Cardinality=18,621,349
ss_si_id 理應近似主鍵基數(關聯 goods_info 主鍵),實際僅 155 萬,差異巨大。
重新收集統計信息,Cardinality 反而下降(採樣頁差異導致波動),確認統計信息非根因。
SELECT COUNT(*) FROM js_sgoods_sku WHERE ss_si_id = 0; 结果:7,994,788 / 19,048,617 = 41.97%
表中 42% 數據的 ss_si_id = 0(默認值),導致索引選擇性極低,掃描近半表數據。
-F 強制BLOCKED 狀態WHERE ... AND ss_si_id <> 0,執行計劃層面過濾默認值pt-kill 持續殺掉該慢查詢,保護 DB 存活id=0, status=-1),業務層校驗攔截LIMIT、分頁查詢、禁止全量拉取,防止應用層 OOM