SUM(A+B) != SUM(A)+SUM(B) 當 A 或 B 為 NULL 時,前者結果為 NULL。解決:SUM(IFNULL(A,0)+IFNULL(B,0)) 或 SUM(COALESCE(A,0)+COALESCE(B,0))。
WHERE c=1 OR c=2 OR c=3 → WHERE c IN (1,2,3)。OR 複雜度 O(n),IN 走範圍查詢 O(log n),IN 列表建議 < 200 個值。

WHERE a=1 OR b=2 → SELECT ... WHERE a=1 UNION SELECT ... WHERE b=2。利用各自索引合併結果。

無需去重用 UNION ALL,避免排序去重開銷。
GROUP BY col ORDER BY NULL 禁用默認排序,提升性能。

數字類型索引:體積小、比較快、存儲省。業務鍵盡量用 INT/BIGINT。
LOAD DATA INFILE ≈ INSERT 快 20 倍INSERT VALUES (...),(...),(...) 減少索引刷新INSERT ... SELECT ...(延遲、同步出錯風險)SLEEP(0.01) 控制頻率
INT(3) vs INT(11) 存儲均佔 4 字節,M 僅影響 ZEROFILL 時的前導零顯示(如 INT(3) ZEROFILL 存 10 顯示 010)。不限制存儲範圍。
大數據量易 OOM。優化:臨時表法
-- 優化前
SELECT COUNT(DISTINCT uid) FROM big_table;
-- 優化後
CREATE TEMPORARY TABLE tmp_uid SELECT uid FROM big_table GROUP BY uid;
SELECT COUNT(*) FROM tmp_uid;

| 函數 | 用法 | 示例 |
|---|---|---|
| REPLACE | 字符串替換 | UPDATE t SET c=REPLACE(c,'old','new') |
| CONCAT | 拼接 | SELECT CONCAT(a,'_',b) FROM t |
| IFNULL | NULL 取默認 | IFNULL(expr1,expr2) |
| IF | 條件表達式 | IF(expr1, expr2, expr3) |
| CASE WHEN | 多分支 | CASE WHEN sex=1 THEN '男' ELSE '女' END |
DELETE FROM table_test
WHERE id NOT IN (
SELECT id FROM (
SELECT MIN(id) AS id FROM table_test GROUP BY uid
) t1
);