我有一个非常简单的问题。 我想知道某个数据库行是否存在。
我通常使用:
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意味着最低的负载。
但实际上这是真的吗?
任何人都可以启发我吗?
答案 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,尤其是当您有一个大表时。