小编Dar*_*yte的帖子

为什么 MySQL 8 在使用具有降序主键、2 个索引以及与现有行的有效联接条件的表时不返回任何行

使用 2 个表(A 和 B),可通过它们的 PK 连接,A 的主键按 DESC 排序(PK 按 MySQL 8 允许的降序排列),并且 A 有 2 个按 ASC 排序的索引。

当我执行类似的查询时

SELECT * FROM `A` a
LEFT JOIN `B` b ON a.id <=> b.id
WHERE a.idx1 = 'X' AND a.idx2 = 'Y';
Run Code Online (Sandbox Code Playgroud)

它不会返回任何内容...但是,如果我添加一个精确的条件,例如:

SELECT * FROM `A` a
LEFT JOIN `B` b ON a.id <=> b.id
WHERE a.idx1 = 'X' AND a.idx2 = 'Y' AND a.id = 1337;
Run Code Online (Sandbox Code Playgroud)

它将查找具有指定值作为 PRIMARY KEY 的行。

解释表明,当 MySQL 没有找到任何内容时,它将使用“index_merge_intersection”优化。如果我们禁用“index_merge”优化,第一个查询将按预期返回所有结果。

为什么?

mysql index primary-key sorting mysql-8.0

3
推荐指数
1
解决办法
874
查看次数

标签 统计

index ×1

mysql ×1

mysql-8.0 ×1

primary-key ×1

sorting ×1