MySQL SELECT 1 vs SELECT`field_id` AND COUNT 1 vs COUNT(*)或COUNT(`field_id`)性能明智

时间:2014-10-22 06:42:45

标签: mysql count

我有一个非常简单的问题。 我想知道某个数据库行是否存在。

我通常使用:

SELECT 1 FROM `my_table` WHERE `field_x` = 'something'

然后我用:

获取结果
$row = self::$QueryObject->fetch();

并检查是否有任何结果:

if(isset($row[1]) === true){
    return(true);
}

你也可以这样做:

COUNT 1 FROM `my_table` WHERE `field_x` = 'something'

类似于COUNT * FROM my_table and COUNT field_id FROM`my_table

但我想知道......这与表现有什么关系?

使用SELECT 1COUNT 1是否有任何缺点? 我的感觉是选择INTEGER 1意味着最低的负载。

但实际上这是真的吗?

任何人都可以启发我吗?

2 个答案:

答案 0 :(得分:3)

实际上你的所有解决方案都不是最理想的:)即使你添加limit,你对查询的处理方法是阅读要找到的每一行。这样做:

SELECT EXISTS ( SELECT 1 FROM `my_table` WHERE `field_x` = 'something');
如果找到了某些内容,则

EXISTS返回1,否则返回0。一旦找到条目,它就会停止搜索。您在子查询中选择的内容无关紧要,您甚至可以选择null

另请注意,COUNT(*)COUNT(1)COUNT(column_name)非常不同。 COUNT(*)计算每一行,而COUNT(column_name)仅计算非null的行。

答案 1 :(得分:0)

如果将LIMIT 1添加到查询的末尾,那么SELECT的工作效率优于COUNT,尤其是当您有一个大表时。

相关问题