计数表行

时间:2009-12-12 13:31:02

标签: mysql

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

12 个答案:

答案 0 :(得分:212)

SELECT COUNT(*) FROM fooTable;

将计算表格中的行数。

请参阅reference manual

答案 1 :(得分:58)

因为没有人提到它:

show table status;

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

此信息可在MySQL 4中获得,可能在MySQL 3.23中也是如此 - 很久以前的信息模式数据库。

<强>更新

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

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

select count(*) from table;

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

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

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

答案 2 :(得分:27)

我们还有另一种方法可以查找表中的行数而不在该表上运行select查询。

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

select * from information_schema.TABLES where table_name = 'table_name'\G

答案 3 :(得分:6)

简单地:

SELECT COUNT(*) FROM `tablename`

答案 4 :(得分:5)

select count(*) from YourTable

答案 5 :(得分:2)

$sql="SELECT count(*) as toplam FROM wp_postmeta WHERE meta_key='ICERIK' AND post_id=".$id;
$total = 0;
$sqls = mysql_query($sql,$conn);
if ( $sqls ) {
    $total = mysql_result($sqls, 0);
};
echo "Total:".$total;`

答案 6 :(得分:2)

做一个

com.google.cloud.translate.TranslateException: The request is missing a valid API key.
        at com.google.cloud.translate.spi.v2.HttpTranslateRpc.translate(HttpTranslateRpc.java:61)
        at com.google.cloud.translate.spi.v2.HttpTranslateRpc.translate(HttpTranslateRpc.java:144)
        at com.google.cloud.translate.TranslateImpl$4.call(TranslateImpl.java:113)
        at com.google.cloud.translate.TranslateImpl$4.call(TranslateImpl.java:110)
        at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:89)
        at com.google.cloud.RetryHelper.run(RetryHelper.java:74)
        at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:51)
        at com.google.cloud.translate.TranslateImpl.translate(TranslateImpl.java:110)
        at com.google.cloud.translate.TranslateImpl.translate(TranslateImpl.java:124)
        at orderFullfilment.EventDriver.main(EventDriver.java:138)
Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "The request is missing a valid API key.",
    "reason" : "forbidden"
  } ],
  "message" : "The request is missing a valid API key.",
  "status" : "PERMISSION_DENIED"
}
        at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:146)
        at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
        at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
        at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1065)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
        at com.google.cloud.translate.spi.v2.HttpTranslateRpc.translate(HttpTranslateRpc.java:130)
        ... 8 more

您可以使用之后的位置指定条件

SELECT COUNT(*) FROM table;

答案 7 :(得分:2)

如果您的表中有多个字段且表格很大,那么不要使用 *会更好,因为它会将所有字段加载到内存中并使用以下内容会有更好的性能

SELECT COUNT(1) FROM fooTable;

答案 8 :(得分:1)

Santosh 所述,我认为此查询速度很快,而不会查询所有表。

要返回数据记录数的整数结果,对于特定数据库中的特定表名

select TABLE_ROWS from information_schema.TABLES where TABLE_SCHEMA = 'database' 
AND table_name='tablename';

答案 9 :(得分:0)

如果您有主键或唯一键/索引,则可能是更快的方法(已对400万行表进行了测试)

SHOW INDEXES FROM "database.tablename" WHERE Key_Name=\"PRIMARY\"

然后获取基数字段(接近即时)

从0.4s到0.0001ms的时间

答案 10 :(得分:0)

可以方便地按索引字段选择计数和过滤器。试试这个

EXPLAIN SELECT * FROM table_name WHERE key < anything; 

答案 11 :(得分:-3)

这是一个特例。如果您从不删除表中的数据,则只需使用auto_increment id列来计算行数。将数据插入此表时,请确保未手动设置id。此操作仅需要几毫秒。

SELECT id FROM table ORDER BY id DESC LIMIT 1;