示例
示例
-- phone 是 varchar:与数字比较导致列被转换,索引失效
SELECT * FROM users WHERE phone = 13800000000;
-- 修正:字面量加引号,与列类型一致
SELECT * FROM users WHERE phone = '13800000000';
-- JOIN 两侧类型不一致同样会转换,必要时显式 CAST
SELECT u.id
FROM users u
JOIN phones p ON p.no = u.phone; -- 两列类型要一致| 规则 | 比较双方类型不一致时发生隐式转换;转换发生在列一侧则无法走索引 |
|---|---|
| 反向情形 | 数字列与字符串字面量比较:字面量被转数字,索引通常仍可用 |
| 排查 | EXPLAIN 中 key 为 NULL、type=ALL 时核对列类型 |