mysql Federated引擎 远程表建立索引

mysql Federated 引擎 远程表测试

文章目录

    • mysql Federated 引擎 远程表测试
      • 远程数据库1
        • 创建测试表test_index
        • 模拟10w条数据
      • 远程数据库2
        • 建立远程表
      • 执行计划
      • 添加索引
        • 远程数据库1
        • 远程数据库2
    • 20191011号 更新

两个数据库环境均相同

  • 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:[email protected]: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`) ;

mysql Federated引擎 远程表建立索引_第1张图片

远程数据库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:[email protected]:3306/mysql_db1/test_index';

执行计划

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

执行计划为 type->ref 索引扫描
mysql Federated引擎 远程表建立索引_第2张图片

20191011号 更新

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

你可能感兴趣的:(mysql,性能优化)