作者:李长念
一、序言这个问题是本日朋友提出来的,关于查询一个1200w的数据表的总行数,用count()的速率一贯提不上去。找了很多优化方案,末了另辟路子,选择了用explain来获取总行数。
二、关于count的优化网上关于count()优化的有很多。博主这边的思路便是没索引的就建立索引关系,然后利用count(1)或者count()来提升速率。这两个函数默认利用的是数据表中最短的那个索引字段。我朋友这边由于表中只有一个索引字段,以是利用count(1)和count()没什么差异。
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