JOIN用字符串字段慢因无索引导致全表扫描前缀索引需满足等值匹配且前缀区分度高如COUNT(DISTINCT LEFT(code,4))/COUNT(*)0.95否则失效复合索引顺序、字符集一致性、在线加索引的资源争抢及数据增长后前缀长度失效均需关注。为什么 JOIN 用字符串字段特别慢因为没索引的字符串字段在 JOIN 时只能走全表扫描尤其是 VARCHAR(255) 这种长字段MySQL 得逐行比对整个字符串——哪怕你只查前3位相同的数据。更糟的是如果字段里还带空格、大小写混用或前后有不可见字符ON t1.code t2.code 实际会跳过大量本该匹配的行。VARCHAR 字段加前缀索引后 JOIN 真的能用上吗能但得满足两个硬条件一是 JOIN 条件必须是等值匹配不能是 LIKE %xxx 或函数包裹比如 UPPER(code)二是前缀长度得覆盖绝大多数区分度。比如 code 字段前4位就决定了99%的唯一性那 INDEX idx_code (code(4)) 就够用但如果前6位还有大量重复加 (4) 索引等于白建。建索引前先跑 SELECT COUNT(DISTINCT LEFT(code, 4)) / COUNT(*) FROM table;结果 0.95 才值得避免用 (255) 直接截全字段——MySQL 5.7 对前缀索引长度有限制InnoDB 单列前缀最多767字节utf8mb4 下约191字符复合索引里含前缀字段时顺序很重要(status, code(4)) 在 WHERE status1 AND codeABCD123 场景下才生效前缀索引导致 ORDER BY 或 GROUP BY 失效怎么办前缀索引只存前N个字符MySQL 拿不到完整值所以 ORDER BY code 会退化为文件排序Using filesortGROUP BY code 也可能分组错误。这不是 bug是设计使然——索引不是数据副本。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能