加载到内存后的Maria-Db读取索引

问题描述 投票:0回答:1

我正在使用单独数据库中的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替换为第二个表。

join select optimization mariadb
1个回答
0
投票

x3上的索引必须在较大的表上。这样,优化程序将扫描较小的表,直到找到匹配项。

© www.soinside.com 2019 - 2024. All rights reserved.