在遇到mysql查询加载速度慢的问题后,我现在正在寻找计算行数的最佳方法。我愚蠢地使用了mysql_num_rows()函数来做这件事,现在我意识到这是一种最糟糕的方法。我实际上是在做一个分页,用PHP制作页面。我已经找到了几种计算行数的方法。但我正在寻找更快的方法来计算它。
表类型为MyISAM
所以现在的问题是
哪一个是最好的,也是最快的-
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()`如果还有其他更好的方法,也请让我知道。如果可能,请描述一下答案-为什么它是最好的和更快的。因此,我可以理解和使用基于我的需求的方法。
谢谢。
发布于 2011-08-04 18:26:13
在COUNT上引用MySQL参考手册
对
COUNT(*)进行了优化,以便在SELECT从一个表中检索、没有检索其他列并且没有WHERE子句的情况下非常快速地返回。例如:
mysql> SELECT COUNT(*) FROM student; 此优化仅适用于MyISAM表,因为此存储引擎存储了确切的行数,并且可以非常快速地进行访问。对于像InnoDB这样的事务性存储引擎,存储精确的行数更成问题,因为可能会发生多个事务,每个事务都会影响计数。
发布于 2011-08-04 18:18:14
我将从使用SELECT count(*) FROM 'table_name'开始,因为它是最可移植、最容易理解的,而且数据库管理系统开发人员可能会优化这种常见的惯用查询。
只有在速度还不够快的情况下,我才会对您列出的方法进行基准测试,以找出是否有更快的方法。
发布于 2011-08-04 18:30:06
计算一个常量会稍微快一点:
select count('x') from table;当解析器命中count(*)时,它必须找出表中由*表示的所有列,并准备在count()中接受它们。
使用常量可以绕过这个(尽管是轻微的)列检查开销。
顺便说一句,虽然不是更快,但有一个可爱的选择是:
select sum(1) from table;https://stackoverflow.com/questions/6939442
复制相似问题