MySQL:通过随机 ID 选择时索引无效

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

有一张桌子:

`id` INT(10) NOT NULL AUTO_INCREMENT,
`status` TINYINT(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`) USING BTREE,

当我处理流动语句(该表中有超过1000条记录)时,会处理表扫描。为什么主键索引不起作用?

SELECT * FROM t_test WHERE id = FLOOR(1 + RAND() * 1000)

enter image description here 有时会出现两种不同的结果,为什么会发生这种情况? enter image description here

当mysql通过随机id选择时索引无效并且有时返回两个不同的值

mysql
1个回答
0
投票

执行此操作时:

WITH abc AS (SELECT FLOOR(1 + RAND() * 1000) as  R)
SELECT * FROM t_test WHERE id = (SELECT R FROM abc);

您可能期望 CTE 只返回一条记录,并且可以使用索引。

但是添加 EXPLAIN 时它显示 UNCACHEABLE:

id 选择类型 桌子 分区 类型 可能的键 key_len 参考 过滤 额外
1 小学 t_测试 全部 1024 100.00 使用地点
2 无法缓存 子查询 系统 1 100.00
3 派生 没有使用桌子
© www.soinside.com 2019 - 2024. All rights reserved.