select count(*)是MySQL中用于统计记录行数最常用的方法。
count
方法可以返回表内精确的行数,每执行一次都会进行一次全表扫描,
以避免由于其他连接进行delete
和insert
引起结果不精确。
在某些索引下是好事,但是如果表中有主键,count(*)
的速度就会很慢,特别在千万记录以上的大表。
如果用 explain
命令速度会快很多,因为 explain
用并不真正执行查询,而是查询优化器【估算】的行数。
在一个1500万
条记录的表中测试,用select count(*)
耗时15s
,而用explain
耗时0.08
秒,
两者相差差不多有200倍之多(第一次执行会稍慢,3秒左右)。
如下是explain
方式:
mysql> explain select * from posts; +----+-------------+-------------+------------+------+---------------+------+---------+------+----------+----------+-------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------------+------------+------+---------------+------+---------+------+----------+----------+-------+ | 1 | SIMPLE | posts | NULL | ALL | NULL | NULL | NULL | NULL | 12596096 | 100.00 | NULL | +----+-------------+-------------+------------+------+---------------+------+---------+------+----------+----------+-------+ 1 row in set, 1 warning (0.08 sec)
注意,这里用的是select *,不是select count(*)。
select *
会返回一行数据,包括估算行数rows,在PHP中我们fetch()
,再通过$result['rows']
就可以拿到这个预估值。
select count(*)
则会在extra中有一行Select tables optimized away
,不会拿到函数估算值。
所以,在对数据准确性要求不高,但是对速度要求很苛刻的场合,绝对有必要用这个估算值代替。
你也可以用下面这句,结果和explain
一模一样:
select TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES where TABLE_NAME='posts'; +------------+ | TABLE_ROWS | +------------+ | 12596096 | +------------+ 1 row in set (0.04 sec)
根据实际情况任选一个,都是同一个东西。
出处:http://www.cnblogs.com/huangcong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2015-07-16 黄聪:C#中WebClient自动判断编码是UTF-8还是GBK,并且有超时判断功能
2012-07-16 黄聪:php动态生成javascript中去除特殊换行符的方法
2012-07-16 黄聪:Win7文件另存为时 找不到桌面选项
2012-07-16 黄聪:wordpress后台发布文章,自定义栏目支持HTML,可插入图片
2012-07-16 黄聪:wordpress后台发布文章,自定义栏目和字段
2011-07-16 黄聪:SQL注入代码实例。如何使用SQL注入检查漏洞、猜测数据库表明、列名、帐号密码