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



我正在处理独立数据库中的两个表。t01有大约10000000条记录,c01有150000条记录。请注意,这是从整个项目中剥离出来的,只是为了进入问题领域。

LOAD INDEX INTO CACHE temp1.t01;
select * from temp1.t01 inner join temp2.c01 on temp1.t01.x3 = temp2.c01.x3 limit 1;

如果有比赛,就只有一场。我主要想知道它是否存在。尽管我目前还不明白它为什么会这样,但我对优化这个查询的建议持开放态度。

我遇到的问题是,即使在使用load into cache命令后,我也会观察资源监视器,它显示temp1/t01.msi正在被读取。这种比较大约需要15秒。正如我所说,这是为了测试而剥离的。与temp1.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 temp1;
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;

使用temp2;用c01代替第二个表。

x3上的索引需要在较大的表上。这样,优化器将扫描较小的表,直到找到匹配项。

最新更新