mysql Federated引擎 远程表索引失效和解决方法

问题描述

今天在优化sql慢查询的时候发现一个坑
项目中几张Federated引擎远程表,索引失效
图中标红的这一段都为ALL(全表扫描)
这些失效的表都和remote_eval_employee_quota_detail远程表关联
mysql Federated引擎 远程表索引失效和解决方法_第1张图片
建表语句如下

CREATE TABLE `remote_eval_employee_quota_detail` (
`employee_id`  int(10) NOT NULL COMMENT '人员编号' ,
`quota_id`  int(10) NOT NULL COMMENT '指标编号' ,
`score`  int(10) NOT NULL COMMENT '分数' ,
`fd_plan_detail_uuid`  varchar(50) NOT NULL COMMENT '考评id' ,
`comments`  varchar(500) NULL DEFAULT NULL COMMENT '备注' ,
`qrcode_uuid`  varchar(40) NULL DEFAULT NULL 
)
ENGINE=FEDERATED 
CONNECTION='mysql://zjiao_evalmobile:[email protected]:3306/zjiao_evalmobile/eval_employee_quota_detail' 
;

通过这种方式可以访问另一台数据库服务器中表

查找后发现原因如下

  1. 最近将数据库的默认字符集DEFAULT CHARSET=utf8 换成了 DEFAULT CHARSET=utf8mb4
  2. 重新创建remote_eval_employee_quota_detail,字符集由原来的utf8变为默认的utf8mb4后引起

解决方法

创建表的时候指定DEFAULT CHARSET=utf8即可

CREATE TABLE `remote_eval_employee_quota_detail` (
`employee_id`  int(10) NOT NULL COMMENT '人员编号' ,
`quota_id`  int(10) NOT NULL COMMENT '指标编号' ,
`score`  int(10) NOT NULL COMMENT '分数' ,
`fd_plan_detail_uuid`  varchar(50) NOT NULL COMMENT '考评id' ,
`comments`  varchar(500) NULL DEFAULT NULL COMMENT '备注' ,
`qrcode_uuid`  varchar(40) NULL DEFAULT NULL 
)
ENGINE=FEDERATED DEFAULT CHARSET=utf8
CONNECTION='mysql://zjiao_evalmobile:[email protected]:3306/zjiao_evalmobile/eval_employee_quota_detail' 
;

总结

远程数据库表本数据库表字符集必须要一致

20190929更新

远程表也可以建立索引,但是字符集必须相同,以下文章符集都为utf8mb4

mysql Federated引擎 远程表建立索引
已经找到远程表建立索引的方法

20191011更新

今天又遇到类似索引失效情况
但是有所不同
解决方式还是类似
关联远程表字段类型的(字符集) 必须 和 被关联的字段类型的(字符集) 一致
连接条件

select * from1 t
left join2 t1
ON t.字段1= t1.字段1 

表1 和 表2 中字段1 的字符集必须一致
mysql Federated引擎 远程表索引失效和解决方法_第2张图片

你可能感兴趣的:(项目问题)