计数表行

DJ.*_*DJ. 152 mysql

用于检索表中记录计数的MySQL命令是什么?

Gre*_*osz 223

SELECT COUNT(*) FROM fooTable;
Run Code Online (Sandbox Code Playgroud)

将计算表中的行数.

请参阅参考手册.

  • 你可以做`COUNT(1)`,这将是最快的方法. (9认同)
  • 当我使用索引列的名称而不是*时,它是否更快?像这样:SELECT COUNT(id)FROM`tablename` (7认同)
  • COUNT(\*)是严格的语言定义.如果你尝试COUNT(\*)注意空格,你将得到一个解析错误 (2认同)

Nic*_*ick 63

因为没有人提到它:

show table status;
Run Code Online (Sandbox Code Playgroud)

列出所有表以及一些其他信息,包括每个表的估计行.这是phpMyAdmin用于其数据库页面的内容.

这个信息可以在MySQL 4中找到,可能也在MySQL 3.23中 - 很久以前的信息模式数据库.

UPDATE

因为有投票,我想澄清所显示的数字仅针对InnoDB和TokuDB进行估算,对于MyISAM和Aria(Maria)存储引擎来说绝对正确.

这也是查看MySQL行数的最快方法,因为查询类似:

select count(*) from table;
Run Code Online (Sandbox Code Playgroud)

进行全表扫描可能是非常昂贵的操作,在大型高负载服务器上可能需要数小时.它还会增加磁盘I/O.

相同的操作可能会阻止表进行插入和更新 - 这只发生在异国情调的存储引擎上.

InnoDB和TokuDB可以使用表锁,但需要全表扫描.

  • 通过表来计算每一行以获得行数非常荒谬.所以我也更喜欢这个答案. (4认同)
  • 这看起来是计算行数的最有效方法.我想知道为什么不是答案?我正在使用InnoDB.使用表锁,行数应该是正确的吗? (3认同)

San*_*udu 32

我们有另一种方法可以在不在该表上运行select查询的情况下找出表中的行数.

每个MySQL实例都有information_schema数据库.如果运行以下查询,它将提供有关该表的完整详细信息,包括该表中的大致行数.

select * from information_schema.TABLES where table_name = 'table_name'\G
Run Code Online (Sandbox Code Playgroud)


Dav*_*unt 6

只是:

SELECT COUNT(*) FROM `tablename`
Run Code Online (Sandbox Code Playgroud)


Adr*_*der 5

select count(*) from YourTable
Run Code Online (Sandbox Code Playgroud)