2014-10-22 114 views
0

我有一个非常简单的问题。 我想知道某个数据库行是否存在。MySQL SELECT 1 vs SELECT`field_id` AND COUNT 1 vs COUNT(*)or COUNT(`field_id`)性能明智

我一般用:

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

其实你所有的解决方案都不是最理想的:)你对你的查询所做的事情就是读取每行都有的东西,即使你添加了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的行。

0

如果将LIMIT 1添加到查询的末尾,那么SELECT比COUNT的效果更好,尤其是当您有一个大表时。

+0

仍然不是最理想的:)随时查看我的答案。 – fancyPants 2014-10-22 07:02:43