我正在尝试加入两个不同引擎上的两个表。一个在 Innodb 上,另一个在 Tokudb 上。
查询类似于:
select * from table1 t1, table2 t2 where t1.a = t2.x and t1.b = 'xyz';
这里table1有 a(indexed), b(indexed), c 列并且有引擎innodb
而table2有 x(indexed), y, z 列并且有引擎tokudb
它正在扫描 table2 的所有行并使用连接类型:ALL
解释查询的结果
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1 NULL const b,a b 303 const 1 100.00 NULL
1 SIMPLE t2 NULL ALL NULL NULL NULL NULL 20687 100.00 Using where
如您所见,它正在扫描整个 table2。我在这里错过了什么吗?还是因为它加入了两个不同的引擎?
创建表语法
表格1
CREATE TABLE `table1` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT
`a` varchar(255) DEFAULT NULL,
`b` varchar(255) DEFAULT NULL,
`c` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `a` (`a`),
UNIQUE KEY `b` (`b`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
表2
CREATE TABLE `table2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`x` varchar(100) DEFAULT NULL,
`y` varchar(100) DEFAULT NULL,
`z` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `x` (`x`)
) ENGINE=TokuDB DEFAULT CHARSET=latin1;