千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:哈尔滨千锋IT培训  >  技术干货  >  mysql explain中rows是怎么计算的?

mysql explain中rows是怎么计算的?

来源:千锋教育
发布人:xqq
时间:2023-10-21 12:54:06

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

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

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

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

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

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

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

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

延伸阅读:

二、什么是执行计划

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

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

python函数中的参数有哪些?

2023-11-14

python中pygal模块如何使用?

2023-11-14

Python描述符中有哪三种方法?

2023-11-14

最新文章NEW

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

2023-11-14

python中doctest库是什么?

2023-11-14

python模块引入的三种方式

2023-11-14

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>