从mysql数据库计算行数的最佳方法

Aaj*_*hid 3 mysql database database-optimization

在面对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()`
Run Code Online (Sandbox Code Playgroud)

如果还有其他更好的方法,请告诉我们.如果可能的话,请描述答案 - 为什么它最好,更快.所以我可以理解并可以根据我的要求使用该方法.

谢谢.

Ran*_*ray 7

COUNT上引用MySQL参考手册

如果SELECT从一个表检索,没有检索到其他列,并且没有WHERE子句,则COUNT(*)被优化为非常快速地返回.例如:

mysql> SELECT COUNT(*) FROM student; 
Run Code Online (Sandbox Code Playgroud)

此优化仅适用于MyISAM表,因为为此存储引擎存储了精确的行数,并且可以非常快速地访问.对于诸如InnoDB之类的事务存储引擎,存储精确行计数更成问题,因为可能正在发生多个事务,每个事务都可能影响计数.

另请阅读此问题 MySQL - 复杂性:SELECT COUNT(*)FROM MyTable;


Red*_*ick 5

我将首先使用,SELECT count(*) FROM 'table_name'因为它是最易于理解的,易于理解的,并且因为DBMS开发人员可能会优化此类常见的惯用查询.

只有当它不够快时,我才能对您列出的方法进行基准测试,以确定是否有更快的速度.