explain估算rows不准确
如图创建了一张表,表里没有任何的数据。
执行以下sql语句
select count(*) from tbl_book where type = '直播';
由上图可得到查询出来的数量count为0
执行explain语句可以得到详细的数据,rows估算为1,得到的实际数据rows和count不等。
再往表中插入一万条数据,执行以下sql
DROP PROCEDURE IF EXISTS proc_initData;-- 如果存在此存储过程则删掉
DELIMITER $ -- 将结束符改成$
CREATE PROCEDURE proc_initData()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i<=10000 DO
INSERT INTO tbl_book (type, name, description) VALUE ('直播','直播带货:淘宝、天猫直播从新手到高手',
'一本教你如何玩转直播的书,10堂课轻松实现带货月入3W+');
SET i = i+1;
END WHILE;
END $
CALL proc_initData(); -- 调用存储过程构建数据
同样的执行之前的sql查询表的数量
select count(*) from tbl_book where type = '直播';
如图查询得到的数据量为一万,再执行explain查询sql执行情况
得到的rows值为9807
总结
- MySQL的优化器在不同的版本中可能会有所不同。这可能导致同一个查询在不同版本的MySQL中执行计划不同。
- EXPLAIN 的结果是估算值,用于优化器选择执行计划
- 实际执行可能与 EXPLAIN 的预估不同
- 统计信息的准确性直接影响预估的准确性