强转
最近优化慢sql,通过EXPLAIN发现,extra中有数据是Using join buffer (Block Nested Loop),
即使加了索引还不起作用
后面发现两个表的关联字段不一致,一个为bigint ,还是自递增的,另一个为varchar,
举个例子:
例如
tb1的主键为bigint
tb2的关联字段为varchar,字符集为utf8
select * from tb1
left join tb2 on tb1.id = tb2.id
用这个sql运行后,extra中显示的是Using join buffer (Block Nested Loop)
因为联表字段类型、字符集不一致,所以不走索引
解决:
select * from tb1
left join tb2 on CONVERT(tb1.id USING utf8) = tb2.id
运用CONVERT()函数转换字符集类型为utf-8,最终走索引,问题解决