Mysql计数vs mysql SELECT,哪一个更快?

时间:2009-11-02 08:07:49

标签: mysql select count

如果我想检查一个名称,我想查看users表下“username”列中存在多少行/名称。让我们说成千上万......我应该使用:

  • count(name),

  • count(*)或

  • SELECT username FROM users where username ='name'

哪一个更合适?或者他们会在速度/响应方面给出相同的结果?

编辑:

谢谢大家,我找到了答案,count()肯定会更快

此查询是否正确

SELECT COUNT( username )
FROM users
WHERE `username` = 'tim' 

5 个答案:

答案 0 :(得分:21)

COUNT(*)COUNT(Name)可能会产生不同的值。 COUNT将不包含NULL值,因此如果 Name 的任何实例等于NULL,则不会计算它们。

COUNT(*)的效果也会优于Count(Name)。通过指定COUNT(*),您可以让优化器自由使用它希望的任何索引。通过指定COUNT(Name),您强制查询引擎使用该表,或至少包含NAME列的索引。

答案 1 :(得分:3)

COUNT(name)或COUNT(*)会更快一些,因为它们不需要返回太多数据。 (请参阅Andrew Shepherd关于这两种形式的COUNT以及COUNT())之间语义差异的回复。重点是“检查名称”,这些差异与以下技巧无关:而不是计数你也可以使用

SELECT username FROM users where username = 'name' LIMIT 1;

这会产生检查(存在)名称的效果,但会尽快返回。

答案 2 :(得分:1)

计数(*)会更快,因为MySQL引擎可以自由选择索引进行计数。

答案 3 :(得分:0)

如果有许多具有相同名称的用户(许多行而不是一行),则Select语句会产生更多流量。

答案 4 :(得分:0)

尝试所有三种并使用最好的预制件。如果它们都是相同的预制形式,这是一个过早优化的例子,你应该只使用你觉得最舒服的那个,并在必要时稍后进行调整。如果你迷信,你也可以考虑使用count(1),我被告知也可以提供性能优势。

我会说你应该使用一个选择前1,但你检查一个用户名,这可能是一个索引的唯一列,所以理论上计数应该预先形成,考虑到只有一个。