explain估算rows不准确

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 的预估不同
  • 统计信息的准确性直接影响预估的准确性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值