Mysql计数与Mysql选择,哪一个更快?
如果我想检查一个名称,我想看看users表下的“username”列中有多少行/名称。让我们说几千。。。十万,我应该使用:Mysql计数与Mysql选择,哪一个更快?,mysql,select,count,Mysql,Select,Count,如果我想检查一个名称,我想看看users表下的“username”列中有多少行/名称。让我们说几千。。。十万,我应该使用: 伯爵(姓名) 计数(*)或 从用户名为'name'的用户中选择用户名 哪个更合适?或者他们会在速度/响应方面给出相同的结果 编辑: 谢谢各位,我找到了答案,count()肯定会更快 这个问题对吗 SELECT COUNT( username ) FROM users WHERE `username` = 'tim' 如果有很多同名的用户(很多行而不是一行),Sele
- 伯爵(姓名)
- 计数(*)或
- 从用户名为'name'的用户中选择用户名
SELECT COUNT( username )
FROM users
WHERE `username` = 'tim'
如果有很多同名的用户(很多行而不是一行),Select语句会产生更多的流量。COUNT(name)或COUNT(*)会更快一些,因为它们不需要返回太多数据。 (参见Andrew Shepherd关于这两种计数形式之间语义差异的回复,以及COUNT()。重点是“检查姓名”,这些差异与以下技巧关系不大:除了计数,您还可以使用
SELECT username FROM users where username = 'name' LIMIT 1;
这将具有检查(是否存在)名称的效果,但在找到一个名称后立即返回。尝试所有三种方法,并使用最好的预制件。如果它们都是相同的,这是一个过早优化的例子,你可能只需要使用你觉得最舒服的一个,然后在必要时调整它。如果你迷信,你也可以考虑使用计数(1),我已经被告知也能发挥性能优势。 我想说的是,你应该使用一个selecttop1,但是你检查的用户名可能是一个索引的唯一列,所以理论上,考虑到只能有一个,计数也应该执行
COUNT(*)
和COUNT(Name)
可能产生不同的值COUNT
将不包括空值,因此,如果名称的任何实例等于NULL,则不会对其进行计数
COUNT(*)
的性能也将优于COUNT(Name)
。通过指定COUNT(*)
您可以让优化器自由地使用它想要的任何索引。通过指定COUNT(Name)
您强制查询引擎使用表,或者至少使用包含Name列的索引。COUNT(*)会更快,因为MySQL引擎可以自由选择要计数的索引。好的,用户名不应超过5。所以,如果我们在表中插入新数据,我会检查名称是否超过50个字符。。。嗯,我试过使用count(),但给我错误lol好的,我将使用count(*)而不是count(column_name)@Andrew Shepherd nice one先生,尽管如果您可以添加一些关于性能的内容以及可能重复的