mysql - 使用两个不同引擎(TokuDB 和 InnoDB)连接表时索引无法正常工作
问题描述
我正在尝试加入两个不同引擎上的两个表。一个在 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;
解决方案
加入时使用相同CHARACTER SET
:
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
) ENGINE=TokuDB DEFAULT CHARSET=latin1;
^^^^^^
推荐阅读
- python - Pandas 数据透视表加权平均值
- javascript - 同值零算法如何工作?
- css - 下拉菜单不断扩展,没有内容
- javascript - 如何使用前一个数据进行调用并将结果数据连接在一起?
- python - 用Python写操作结果
- javascript - 处理需要彼此数据的嵌套异步函数的最佳方法是什么?
- java - 如何更改不是我在 RecycleView 中单击的项目?
- javascript - 使用ajax从html输入中保存值>日期
- reactjs - 当依赖项需要用户输入时,避免“useEffect”在挂载时获取数据
- selenium - 用于 PrimeFaces 选择列表组件的 Selenium webDriver