使用 Mycat 中间件时 explain 解析 SQL 问题 时间: 2018-05-12 14:09 分类: 数据库 今天同事在使用`explain`查看 SQL 语句执行计划时发现一个问题,问我`explain`的结果怎么变成类似下面这种结果了:  可以看到,结果并不是我们预期的那样子,原因很容易就能猜到是`Mycat`将原来的 SQL 进行了拦截,然后做的处理就是将`explain`解释成解析路由选择,然后返回路由选择的信息,即上图所示路由选择结果是 SQL 语句在 dn1 分片节点上执行。 那么,我们该如何获取 MySQL 中`explain`命令的结果信息呢?到底还能不能做到? 答案是肯定的,当然还能做到,不然难道每次性能调优还去连接分片节点的数据库进行`explain`解析 SQL 语句吗? 比如要获取到`from nt_vehicle v where vehicle_id = '4028818761301c1a016168ce3836010e'`SQL 语句的解析情况,具体操作步骤如下: 1. 首先执行 > explain select * from nt_vehicle v where vehicle_id = '4028818761301c1a016168ce3836010e' 返回的结果就是前面那张图。 2. 根据步骤 1 中返回的结果,执行如下语句: > explain2 datanode=dn1 sql=select * from nt_vehicle v where vehicle_id = '4028818761301c1a016168ce3836010e' 此时就能返回我们想要的结果了:  标签: mycat explain