MariaDB没有在InnoDB上使用哈希唯一密钥

disbfnqx  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(150)

我创建了一个表,其中包含一个具有唯一键的文本列:

create table a(id int auto_increment key,a text unique);

当我运行show create table a;时,它说唯一键使用哈希:

CREATE TABLE `a` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `a` text DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `a` (`a`) USING HASH
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

我所期望的是,当我insert into a (a)values('a');,然后select * from a where a='a';,它应该使用该键进行搜索。然而,它似乎没有,查询在大型数据集上很慢,explain select * from a where a='a';产生以下结果:

+------+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id   | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+------+-------------+-------+------+---------------+------+---------+------+------+-------------+
|    1 | SIMPLE      | a     | ALL  | a             | NULL | NULL    | NULL | 1    | Using where |
+------+-------------+-------+------+---------------+------+---------+------+------+-------------+

为什么MariaDB不使用该键进行搜索?
当我手动添加另一个键alter table a add key b(a) using hash;时,它按预期工作,只是一个警告Specified key was too long; max key length is 3072 bytes

q8l4jmvw

q8l4jmvw1#

根据MDEV-13445,MariaDB优化器还不支持在文本类型上使用HASH索引。
参见MDEV-31072

相关问题