【发布时间】:2010-12-25 23:47:50
【问题描述】:
获取表中记录数的 MySQL 命令是什么?
【问题讨论】:
标签: mysql
获取表中记录数的 MySQL 命令是什么?
【问题讨论】:
标签: mysql
【讨论】:
tablename
COUNT(1),这是最快的方式。
因为没有人提到它:
show table status;
列出所有表以及一些附加信息,包括每个表的估计行数。这是 phpMyAdmin 用于其数据库页面的内容。
此信息在 MySQL 4 中可用,可能在 MySQL 3.23 中也可用 - 长时间先验信息模式数据库。
由于有人反对,我想澄清一下,显示的数字是为 InnoDB 和 TokuDB 估算的,对于 MyISAM 和 Aria (Maria) 存储引擎来说绝对正确。
行数。一些存储引擎,例如 MyISAM,存储 准确计数。对于其他存储引擎,例如 InnoDB,此值为 一个近似值,可能与实际值相差 40% 到 50%。在这种情况下,请使用 SELECT COUNT(*) 获得准确的 数。
这也是在 MySQL 上查看行数的最快方法,因为查询如下:
select count(*) from table;
进行全表扫描可能是非常昂贵的操作,在大型高负载服务器上可能需要数小时。它还增加了磁盘 I/O。
相同的操作可能会阻止表的插入和更新——这只发生在奇异的存储引擎上。
InnoDB 和 TokuDB 都可以加表锁,但是需要全表扫描。
【讨论】:
我们还有另一种方法可以在不对该表运行select 查询的情况下找出表中的行数。
每个 MySQL 实例都有 information_schema 数据库。如果您运行以下查询,它将提供有关该表的完整详细信息,包括该表中的近似行数。
select * from information_schema.TABLES where table_name = 'table_name'\G
【讨论】:
简单地说:
SELECT COUNT(*) FROM `tablename`
【讨论】:
select count(*) from YourTable
【讨论】:
如果你的表中有多个字段并且你的表很大,最好 不要使用 * 因为它将所有字段加载到内存中,使用以下将有更好的性能
SELECT COUNT(1) FROM fooTable;
【讨论】:
做一个
SELECT COUNT(*) FROM table;
您可以在此之后使用 Where 指定条件
SELECT COUNT(*) FROM table WHERE eye_color='brown';
【讨论】:
正如 Santosh 所提到的,我认为这个查询相当快,而不是查询所有表。
对于特定数据库中的特定表名,返回数据记录数的整数结果:
select TABLE_ROWS from information_schema.TABLES where TABLE_SCHEMA = 'database'
AND table_name='tablename';
【讨论】:
count(*),答案非常清楚
$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;`
【讨论】:
你必须使用 count() 返回匹配的行数 指定标准
select count(*) from table_name;
【讨论】:
如果您有主键或唯一键/索引,则可能采用更快的方法(已使用 400 万行表进行测试)
SHOW INDEXES FROM "database.tablename" WHERE Key_Name=\"PRIMARY\"
然后得到基数场(接近即时)
从 0.4s 到 0.0001ms 的时间
【讨论】:
通过索引字段过滤可以方便地选择计数。试试这个
EXPLAIN SELECT * FROM table_name WHERE key < anything;
【讨论】: