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号 更新
在使用过程中发现,建立远程表的时候增加索引即可,原表可以不用建对应索引