mysql Federated引擎 远程表建立索引

mysql Federated 引擎 远程表测试

两个数据库环境均相同

  • mysql版本5.7.23
  • 字符集utf8mb4

远程数据库1

创建测试表test_index
DROP TABLE IF EXISTS `test_index`;
CREATE TABLE `test_index` (
  `id` int(10) DEFAULT NULL,
  `name` varchar(40) DEFAULT NULL,
  `age` int(10) DEFAULT NULL,
  `addr` varchar(40) DEFAULT NULL,
  `username` varchar(40) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
模拟10w条数据
set @rownum :=0;
insert into test_index

select @rownum, CONCAT('用户',@rownum:=@rownum+1),18, CONCAT('地址',@rownum), CONCAT('user',@rownum) 
from table_name t LIMIT 100000;

table_name这个表是测试系统中一个100W数据的表

远程数据库2

建立远程表
CREATE TABLE `remote_test_index` (
`id`  int(10) NOT NULL ,
`name`  varchar(40) NOT NULL ,
`age`  int(10) NOT NULL ,
`addr`  varchar(40) NOT NULL ,
`username`  varchar(40) NOT NULL 
)
ENGINE=FEDERATED
CONNECTION='mysql://mysql_db1:mysql_db1@192.168.1.87:3306/mysql_db1/test_index';

执行计划

执行计划为 type->ALL 全表扫描

EXPLAIN select * from remote_test_index t where t.id = 77777;

添加索引

远程数据库1
ALTER TABLE `test_index`
ADD INDEX `index1` (`id`) ;

在这里插入图片描述

远程数据库2

重新建表,远程表不能直接编辑

drop table remote_test_index;
CREATE TABLE `remote_test_index` (
`id`  int(10) NOT NULL ,
`name`  varchar(40) NOT NULL ,
`age`  int(10) NOT NULL ,
`addr`  varchar(40) NOT NULL ,
`username`  varchar(40) NOT NULL ,
KEY `index1` (`id`)
)
ENGINE=FEDERATED
CONNECTION='mysql://mysql_db1:mysql_db1@192.168.1.87:3306/mysql_db1/test_index';

执行计划

EXPLAIN select * from remote_test_index t where t.id = 77777;

执行计划为 type->ref 索引扫描
在这里插入图片描述

20191011号 更新

在使用过程中发现,建立远程表的时候增加索引即可,原表可以不用建对应索引

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值