作者:李长念

一、序言

这个问题是本日朋友提出来的,关于查询一个1200w的数据表的总行数,用count()的速率一贯提不上去。
找了很多优化方案,末了另辟路子,选择了用explain来获取总行数。

二、关于count的优化

网上关于count()优化的有很多。
博主这边的思路便是没索引的就建立索引关系,然后利用count(1)或者count()来提升速率。
这两个函数默认利用的是数据表中最短的那个索引字段。
我朋友这边由于表中只有一个索引字段,以是利用count(1)和count()没什么差异。

php获取行数MySQL的count的优化获取万万级数据表的总行数 NoSQL

MySQL中聚合函数count的利用和性能优化

(https://blog.csdn.net/lmy86263/article/details/73681633)

mysql count() 会选哪个索引?

(https://blog.csdn.net/zbdba/article/details/47753721)

大家可以参考这两个博客,都挺不错的。

三、利用explain获取行数

1、关于explain

关于explain,利用mysql的都知道,这个函数是专门用于查看sql语句的实行效率的,网上可供参考的文章很多。

定义: explain 命令速率很快,由于 explain 用并不真正实行查询,而是查询优化器【估算】的行数。

我们利用explain之后,会看到返回很多参数,个中:

rows:显示MySQL认为它实行查询时必须检讨的行数。
便是这个东西了,既然我们要获取的是数据表的行数,那么可以利用:

2、关于返回值

以前博主也没把稳过返回值的问题,都是直接通过phpmyadmin来查看sql的实行效率。
这次由于要用到rows的值,以是就打印了一下,原来这个explain函数是会返回一个数组。
这样我们就能通过这个数组获取到我们需求的rows。

这里直接获取这个值即可。
速率极快。
原来查询速率是2.33s,换成只用explain之后,速率仅为0008s,提升十分巨大。

原文链接:https://blog.csdn.net/LJFPHP/article/details/84400400