MySQL计算行性能

时间:2009-12-06 12:11:42

标签: mysql performance

对于InnoDB存储,最好按

计算记录总数
  • 上使用mysql_num_rows
    select * from tbl where pk = 1
    

  • 获取数组并从

    中检索“total”值
    select count(*) as total from tbl where pk = 1
    

4 个答案:

答案 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是主键,则无关紧要,因为它总是聚集在一起)