小编sas*_*axi的帖子

由于选择性较低,MariaDB不对1列自连接使用索引(所有NULL)

我们有一个查询在我们的一个表中查找重复项,基于很少可用的标识符,让我们调用它rareIdentifier INT(10) UNSIGNED NULL.我们在此列上有一个单列常规旧索引.

有问题的查询如下所示:

SELECT a.id, b.id FROM
    widget a INNER JOIN widget b
ON a.rareIdentifier = b.rareIdentifier;
Run Code Online (Sandbox Code Playgroud)

问题是,对于最近的重复查找运行,我们实际上有0一个值为的行rareIdentifier; 即所有行都有NULL此列.MariaDB决定不使用索引,选择Using join buffer (flat, BNL join)扫描整个表格的方法.

但是NULLs不能相等!那么为什么要尝试比较每对行呢?

据我所知,如果MySQL/MariaDB的选择性太低,它将不会使用索引.我相信这就是这种情况.实际上,似乎在索引中只有1个值意味着查询几乎是瞬时的.

该表是InnoDB表.

mysql indexing innodb mariadb

6
推荐指数
1
解决办法
157
查看次数

标签 统计

indexing ×1

innodb ×1

mariadb ×1

mysql ×1