mysql 字符集造成的效能問題

pentium發表於2020-04-26

簡單的查詢,返回同樣的,用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 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14377/viewspace-2688564/,如需轉載,請註明出處,否則將追究法律責任。

相關文章