MySQL 表字段排序规则对表连接查询的影响

记一次测试环境页面加载缓慢的原因排查。

SELECT
    oo.org_name,
    dd.distributor_org_id,
    dd.auto_distribute_flag
FROM
    distribute_distributor_info dd
    LEFT JOIN org_organization_info oo ON dd.distributor_org_id = oo.org_id 
    AND oo.del_flag = 0 
    AND dd.del_flag = 0 
WHERE
    dd.supplier_org_id = '4B60CCB94D547D14E050080A0D0536B1' 
    AND dd.customer_org_id = '0D49B1E2D212024AE050A8C00A01E580' 
ORDER BY
    dd.add_time DESC

该 SQL 实际非常简单,测试环境数据量也极少,只有123条记录,可是SQL执行时间却花费了15s

通过 EXPLAIN 分析SQL执行,发现索引效率也很高,扫描的记录数也就是123条

百思不得其解,经过各种不断的检查,发现机构表中 org_id 字段的排序规则是 utf8_general_ci,而 另一张表中 distributor_org_id 字段的排序规则是 utf8_bin,当两者作为表连接条件字段时,由于排序规则的差异导致查询效率极低,将distributor_org_id 字段的排序规则改为 utf8_general_ci 后,查询时间只需要 0.024s 恢复正常

云栖社区有篇文章讲述到了类似的问题 RDS for MySQL 字符序(collation)引发的性能问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值