首页 > 解决方案 > 使用两个不同引擎(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;

标签: mysqlinnodbtokudb

解决方案


加入时使用相同CHARACTER SET

) ENGINE=InnoDB DEFAULT CHARSET=utf8;
) ENGINE=TokuDB DEFAULT CHARSET=latin1;
                                ^^^^^^

推荐阅读