您好,登录后才能下订单哦!
简单的查询,返回同样的,用charge_id去关联,只要0.5s,但如果用order_id要18s! 什么原因?
用order_id时,执行计划是用了Using join buffer (Block Nested Loop);原因查明:把 order_forInit里的order_id字符集是utf8,而 order_item_forInit里的order_id字符集是utf8mb4, 不同的字符集造成两个做join时,不能用上索引,会出现“Using join buffer (Block Nested Loop) ”。把 order_forInit里的order_id字符集改成utf8mb4,就没性能问题了!! 不会出现Using join buffer (Block Nested Loop)
explain
select count(*) from
order_forInit a,
order_item_forInit c,
product d
WHERE
-- a.order_id = c.order_id
a.charge_id = c.charge_id
AND c.product_id = d. product_id;
附录:
mysql字符集 utf8 和utf8mb4 的区别: https://blog.csdn.net/qq_37054881/article/details/90023611
亿速云「云数据库 MySQL」免部署即开即用,比自行安装部署数据库高出1倍以上的性能,双节点冗余防止单节点故障,数据自动定期备份随时恢复。点击查看>>
开发者交流群:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:http://blog.itpub.net/14377/viewspace-2688564/