全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货  >  详情

mysql explain中rows是怎么计算的?

来源:千锋教育
发布人:xqq
2023-10-21

推荐

在线提问>>

一、mysql explain中rows是怎么计算的

row值的含义是mysql解释器【认为】应该查询的行数,有人研究过源码发现这个玩意和实际查询时的表现并没有太多关系。

简单来讲就是,这个rows值只是mysql根据缓存数据的一个估算,反应的是在只有一堆数据并且没有索引时应该扫描的行数。

加过索引后rows值的计算方法和不加索引时相同,依然会出现几万行的情况。但实际查询时mysql会优先读取索引,根据B+树的分支和LIMIT值进行判断。

也就是说实际执行时可能只读取了LIMIT条数据,但是EXPLAIN这个解释预判中的rows数值却很大,因为这是未优化时的预判结果,这个算法并没有随着索引和查询条件而更新。

所以根本不用考虑rows行数过大的问题,只要索引正确且后面没有用到filesort,查询时间也不长,那你的数据库设计就没有问题。

网上好多文章里写的rows值越小越好其实是误区,有时候索引无论怎么建都会让rows显示很大,这个表述是错误的。

你用InnoDB引擎查询试试,有的时候rows值比你数据表中总行数还要大,明显是一个缓存估算结果。

延伸阅读:

二、什么是执行计划

有了慢查询语句后,就要对语句进行分析。一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等。EXPLAIN语句来帮助我们查看某个查询语句的具体执行计划。

相关文章

如何使用python any()判断多元素?

如何使用Pandas处理Excel?

python函数中的参数有哪些?

python中pygal模块如何使用?

Python的excel处理操作

开班信息 更多>>

课程名称
全部学科
咨询

HTML5大前端

Java分布式开发

Python数据分析

Linux运维+云计算

全栈软件测试

大数据+数据智能

智能物联网+嵌入式

网络安全

全链路UI/UE设计

Unity游戏开发

新媒体短视频直播电商

影视剪辑包装

游戏原画

    在线咨询 免费试学 教程领取