侧边栏壁纸
博主头像
为了吃方便面

人类的悲欢并不相通,我只觉得他们吵闹。

  • 累计撰写 16 篇文章
  • 累计创建 13 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

MYSQL因字符集问题导致join时候索引失效

为了吃方便面
2023-05-17 / 0 评论 / 0 点赞 / 104 阅读 / 218 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-05-17,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

问题现象和描述

修改数据列的字符编码集时要谨慎,在使用join时如果等号左右两边的列编码集不一致会导致索引无法命中。
例:

orders.whole_order_no=whole_order.whole_order_no

其中orders表中whole_order_no的字符集是utf8,whole_order表中的whole_order_no的字符集是utf8mb4。分析执行计划时会发现whole_order_no上的索引无法命中。

解决过程和办法

  1. 使用join时等号两边列的字符集保持一致

  2. join时等号两边的字符集已经修改时,可以通过COLLATE关键字统一字符集,示例:

select
	p.whole_order_no,
	p.order_no,
	f.package_no,
	f.failure_data
from
	invoice_failure f
left outer join order_package p on
	p.package_no = f.package_no COLLATE utf8_general_ci
where
	f.operate_status = 1
	and f.type = 1;
0

评论区