EXPLAIN SELECT ... 檢查執行計畫,關注 type、key、rows、Extra 欄位。LIMIT 10 加速驗證。SELECT key_col FROM removed_table WHERE key_col IN (SELECT key_col FROM main_table);現象:WHERE float_col = 1.23 無結果,但肉眼看到資料有 1.23。
原因:FLOAT/DOUBLE 為近似值儲存,二進制無法精確表示十進制小數。
解決:
DECIMAL(10,2) 精確型別。WHERE float_col BETWEEN 1.2299 AND 1.2301。mysqldump --quick db_name tbl1 tbl2 > test_case.sqlmysqladmin create test2 && mysql test2 < test_case.sqlmysqlbug 發送至官方郵件列表。| 類別 | 典型原因 | 檢查方式 |
|---|---|---|
| JOIN 條件 | 關聯鍵資料型別不一致(INT vs VARCHAR) | DESC 兩表對比 |
| WHERE 條件 | 隱含型別轉換導致索引失效 | EXPLAIN 觀察 type=ALL |
| NULL 值 | col = NULL 永遠為 FALSE | 改用 IS NULL |
| 字元集 | 連線字元集與資料不符 | SHOW VARIABLES LIKE 'character_set%' |
| 權限 | 視圖/安全視圖過濾掉資料 | 用 root 執行對比 |
EXPLAIN FORMAT=JSON 獲取更詳細成本資訊(5.6+)。OPTIMIZER_TRACE 追蹤優化器決策路徑(5.6+)。PERFORMANCE_SCHEMA 分析鎖等待與 I/O。