Mysql count 与 mysql SELECT,哪个更快?

问题描述 投票:0回答:5

如果我想检查名称,我想查看用户表下的“用户名”列中存在多少行/名称。可以说数千...数十万,我应该使用:

  • 计数(姓名),

  • 计数(*) 或

  • 从用户中选择用户名,其中用户名 = 'name'

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

mysql select count
5个回答
25
投票

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

COUNT(*)
也会比
Count(Name)
表现得更好。通过指定
COUNT(*)
,您可以让优化器自由地使用它想要的任何索引。通过指定
COUNT(Name)
,您将强制查询引擎使用该表,或者至少使用包含 NAME 列的索引。


3
投票

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

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

这将具有检查名称(存在)的效果,但一旦找到就返回。


1
投票

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


0
投票

如果有很多同名用户(很多行而不是一行),Select 语句会产生更多流量。


-1
投票

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

我想说你应该使用 select top 1,但是你检查的用户名可能是一个索引唯一列,所以理论上计数应该执行得很好,考虑到只能有一个。

© www.soinside.com 2019 - 2024. All rights reserved.