记一次测试环境页面加载缓慢的原因排查。
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)引发的性能问题