MySQL 查询缓慢Using where; Using join buffer (Block Nested Loop)

今天在写sql时,发现了一个慢sql,在测试环境上没问题,但是在正式环境查询非常缓慢。几张万级数据量的表关联操作,查询时间居然长达两分多钟。

查看执行计划,发现同样的语句,在测试环境走了索引,在正式环境上没有走索引,并且在执行计划中提示:Using where; Using join buffer (Block Nested Loop)

查看MySQL版本发现,测试环境为5.6版本,正式环境为5.7版本。

网上找了一圈,都说是索引没建,但是我的表索引没有问题,都建的好好的。折腾了一上午,终于发现了问题。

MySQL在关联查询时,关联条件的字段类型要一致。我在写sql的时候,有一个关联条件的两个字段,一个是decimal,一个是varchar类型,所以查询的时候没有走索引。将两个字段类型统一后,问题解决。

并且验证了,在5.6版本没有问题,在5.7版本,关联条件的字段类型不一致,将导致问题。

后来细想,也是可以理解。用于表关联的字段,从业务的角度来说,属于表达同种业务含义的字段,这样的字段,在数据库设计的时候,应该保持全局统一,而不能连类型都不一致。

记录一下排障问题,供大家参考。

你可能感兴趣的:(解决方案,mysql,mysql,数据库,sql)