首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统计mysql数据库中的行数的最佳方法

统计mysql数据库中的行数的最佳方法
EN

Stack Overflow用户
提问于 2011-08-04 18:00:47
回答 5查看 12.4K关注 0票数 3

在遇到mysql查询加载速度慢的问题后,我现在正在寻找计算行数的最佳方法。我愚蠢地使用了mysql_num_rows()函数来做这件事,现在我意识到这是一种最糟糕的方法。我实际上是在做一个分页,用PHP制作页面。我已经找到了几种计算行数的方法。但我正在寻找更快的方法来计算它。

表类型为MyISAM

所以现在的问题是

哪一个是最好的,也是最快的-

代码语言:javascript
复制
1. `SELECT count(*) FROM 'table_name'`

2. `SELECT TABLE_ROWS
FROM INFORMATION_SCHEMA.TABLES WHERE table_schema =  'database_name'
AND table_name LIKE  'table_name'`

3. `SHOW TABLE STATUS LIKE 'table_name'`

4. `SELECT FOUND_ROWS()`

如果还有其他更好的方法,也请让我知道。如果可能,请描述一下答案-为什么它是最好的和更快的。因此,我可以理解和使用基于我的需求的方法。

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-04 18:26:13

COUNT上引用MySQL参考手册

COUNT(*)进行了优化,以便在SELECT从一个表中检索、没有检索其他列并且没有WHERE子句的情况下非常快速地返回。例如:

代码语言:javascript
复制
mysql> SELECT COUNT(*) FROM student; 

此优化仅适用于MyISAM表,因为此存储引擎存储了确切的行数,并且可以非常快速地进行访问。对于像InnoDB这样的事务性存储引擎,存储精确的行数更成问题,因为可能会发生多个事务,每个事务都会影响计数。

另请阅读此问题MySQL - Complexity of: SELECT COUNT(*) FROM MyTable;

票数 8
EN

Stack Overflow用户

发布于 2011-08-04 18:18:14

我将从使用SELECT count(*) FROM 'table_name'开始,因为它是最可移植、最容易理解的,而且数据库管理系统开发人员可能会优化这种常见的惯用查询。

只有在速度还不够快的情况下,我才会对您列出的方法进行基准测试,以找出是否有更快的方法。

票数 5
EN

Stack Overflow用户

发布于 2011-08-04 18:30:06

计算一个常量会稍微快一点:

代码语言:javascript
复制
select count('x') from table;

当解析器命中count(*)时,它必须找出表中由*表示的所有列,并准备在count()中接受它们。

使用常量可以绕过这个(尽管是轻微的)列检查开销。

顺便说一句,虽然不是更快,但有一个可爱的选择是:

代码语言:javascript
复制
select sum(1) from table;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6939442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档