【问题标题】:What's the fastest way to check that entry exists in database?检查数据库中是否存在条目的最快方法是什么?
【发布时间】:2011-11-26 00:23:27
【问题描述】:

我正在寻找检查条目是否存在的最快方法...

我一生都在做这样的事情......

SELECT COUNT(`id`) FROM `table_name`

有些人不使用COUNT(id),而是使用COUNT(*)。这样更快吗?

LIMIT 1 呢?

附:当然,id 是指主键。

感谢您的建议!

【问题讨论】:

  • 您最好使用 SELECT COUNT(1) FROM table_name
  • 检查表中是否存在行的最快方法或检查数据库中表是否有>0行的最快方法?

标签: mysql performance count exists


【解决方案1】:

在大多数情况下,COUNT(*) 比 MySQL 中的COUNT(id) 更快(因为使用COUNT() 执行分组查询的方式可能会在未来的版本中进行优化,因此两个版本的运行方式相同)。但是如果只想查找是否至少存在一行,可以使用EXISTS

简单:

( SELECT COUNT(id) FROM table_name ) > 0

快一点:

( SELECT COUNT(*) FROM table_name ) > 0

更快:

EXISTS (SELECT * FROM table_name)

【讨论】:

  • 我可以在这些示例中使用WHERE x` = 'abc'` 吗? LIMIT 1 呢?也许它也能提高性能?
  • 您可以在其中任何一个中使用任何复杂条件(WHERE,多个 JOIN)。如果id 不可为空,则所有 3 个都是等效的(在相同情况下它们都返回 TRUE 或 FALSE)。
  • EXISTS 实际上像 LIMIT 1 一样工作。当找到符合条件的一行时,它会停止搜索更多。
【解决方案2】:

如果您不担心准确性,explain select count(field) from table 的速度非常快。

http://www.mysqlperformanceblog.com/2007/04/10/count-vs-countcol/

此链接解释了count(*)count(field) 之间的区别。如有疑问,count(*)

至于检查表不为空……

SELECT EXISTS(SELECT 1 FROM table)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2016-08-16
    • 2012-06-17
    • 2020-01-17
    • 1970-01-01
    • 2020-11-08
    相关资源
    最近更新 更多