EXPLAIN SELECT * FROM t;
-- type=ALL, key=NULL, rows=全表, Extra=空 → 全掃描,無索引
EXPLAIN SELECT * FROM t WHERE id=1;
-- type=const, key=PRIMARY, rows=1, Extra=空 → 主鍵點查,完美
EXPLAIN SELECT * FROM t WHERE name='abc';
-- type=ALL, key=NULL, rows=全表, Extra=Using where → 需加name索引
關注key(用了啥索引)、rows(掃描幾行)、Extra(filesort/temporary/Using where)。**NULL/空白=優化切入點**。
WHERE char_col = varchar_col雖兼容但**索引失效**,大數據下耗時差距指數級增長。
**修正**:建立INT UNSIGNED AUTO_INCREMENT代理鍵(如user_id),JOIN/WHERE走代理鍵,**整數比較最快**。
前端默認輸入框含%,用戶輸入%LOOK實為LIKE '%LOOK%' → **全索引掃描**。
**修正**:前端去默認%,需前綴查詢用LIKE 'LOOK%'(索引範圍掃描),需包含查詢才用%LOOK%。
查產品編號6位數、以9開頭:
LIKE '9%' → 索引範圍掃描,尚可WHERE code BETWEEN 900000 AND 999999 → **純數值範圍,更快**同理:YEAR(dt)<2001 → dt<'2001-01-01';amt/7<24 → amt<168。**把運算挪到常量側,列側保持裸露,索引才能生效**。
「EXPLAIN先行,類型對齊,LIKE不頭通配,運算移常量。」