我有一个非常简单的问题。我想知道是否存在某个数据库行。
我通常使用:
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 1
或COUNT 1
有什么缺点吗??我的感觉是,选择INTEGER 1意味着负载最低。
但这真的是真的吗??
有人能启发我吗?
实际上,您所有的解决方案都是次优的:)您对查询所做的是读取要找到的每一行,即使您添加了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
的行进行计数。
如果将LIMIT 1添加到查询的末尾,那么SELECT比COUNT更有效,尤其是当您有一个大表时。