我正在使用单独数据库中的2个表。 t01具有大约10,000,000条记录,c01具有150,000条记录。请注意,这只是从整个项目中剥离出来的,只是为了到达问题区域。
LOAD INDEX INTO CACHE temp2.c01;
select * from temp1.c54 inner join temp2.c01 on temp1.c01.x3 = temp2.c01.x3 limit 1;
如果有一场比赛,只会有一场比赛。我主要需要知道它是否存在。即使我目前还看不到为什么会这样运行,但我仍然愿意提出建议来优化此查询。
我遇到的问题甚至是在使用装入缓存命令后,我监视资源监视器,并显示正在读取temp2 / c01.msi。此比较大约需要15秒。正如我所说的,将其剥离进行测试。与temp2.t01的比较有成千上万。
key buffer 8,589,934,592
mrr buffer 262,144
myisam sort buffer 8,589,934,592
net buffer 8,192
preload buffer 1,073,741,824
在具有24GB RAM的Windows 10上运行服务器版本:10.4.11-MariaDB-mariadb.org二进制分发
USE temp2;
CREATE TABLE `t01` (
`id` int(11) NOT NULL,
`x3` binary(32) NOT NULL,
`loopcount` bigint(20) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
ALTER TABLE `t01`
ADD PRIMARY KEY (`id`),
ADD KEY `x3` (`x3`);
ALTER TABLE `t01`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
使用temp1;将c01替换为第二个表。
x3上的索引必须在较大的表上。这样,优化程序将扫描较小的表,直到找到匹配项。