对于InnoDB存储,最好按
计算记录总数在
上使用mysql_num_rows
select * from tbl where pk = 1
或
获取数组并从
中检索“total”值select count(*) as total from tbl where pk = 1
答案 0 :(得分:13)
绝对是后者。它可以直接从PK的索引中获取值,而前者几乎肯定需要进行表扫描(除非每一列是索引的一部分;即使这样,它也必须从全部获取值索引)。然后,根据您连接到数据库的方式,有大量的数据传输只是为了计算。
explain
可以提供帮助。在这种情况下,它会告诉你选择被优化掉了。
答案 1 :(得分:4)
除了Zxpro的答案之外,还有MySQL的内部工作:
select * from tbl where pk = 1
强制MySQL物理检索匹配的行;而
select count(*) as total from tbl where pk = 1
允许MySQL计算主键中的条目,而不检索任何表行
答案 2 :(得分:1)
后者最有可能表现更好,因为你只发送一个整数,而在第一种情况下,你将发送更多的数据。
答案 3 :(得分:1)
如果“pk”是主键,则只能有一条记录,因此答案将为0或1,因此您无需计算它们。
但是,后者。
InnoDB不需要检查索引,因为MVCC,它还需要检查当前事务对行是否可见。但这是一个细节。无论如何它都会使用覆盖索引(如果pk是主键,则无关紧要,因为它总是聚集在一起)