疑似explain的bug?
起因
为了测试explain, 也为了测试关于索引优化
准备数据
- 新建了一张测试表
-
12345678
CREATE
TABLE
`tb_demo` (
`id`
int
NOT
NULL
AUTO_INCREMENT,
`
name
`
varchar
(50)
DEFAULT
NULL
,
`score`
decimal
(10,1)
DEFAULT
NULL
,
`remark`
varchar
(50)
DEFAULT
NULL
,
`create_time` datetime
DEFAULT
NULL
,
PRIMARY
KEY
(`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9
DEFAULT
CHARSET=utf8mb4
COLLATE
=utf8mb4_0900_ai_ci;
- 批量插入的存储过程
-
1234567891011121314151617181920
DROP
PROCEDURE
IF
EXISTS `insertdata`;
DELIMITER $$
CREATE
PROCEDURE
`insertdata`(
IN
record
INTEGER
)
BEGIN
DECLARE
number
INTEGER
;
SET
number=1;
START
TRANSACTION
;
WHILE number <=record DO
INSERT
INTO
tb_demo
(
name
, score, remark, create_time)
VALUES
(CONCAT(
'哈哈'
, number), number,
'我测试'
, NOW());
SET
number =number+1;
END
WHILE;
COMMIT
;
END
$$
DELIMITER ;
- 新建一条普通索引: alter table tb_demo add index `id_score` (`score`)
- 执行插入数据
-
12
-- 200w条数据 执行差不多8分钟
call `insertdata`(2000000);
测试
EXPLAIN select score from tb_demo where score > 200 and score < 500
为啥图中的 走了回表? 我理解只查询了索引 不会去找表里的其他数据啊???
接下来我又这么做了一下
EXPLAIN select * from tb_demo where score > 200 and score < 500
what??? 查询所有行 不回表了???
关于http协议
标签:
mysql
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南