我试图找出一行是否存在于一个表中。使用MySQL,是更好的做这样的查询:
SELECT COUNT(*) AS total FROM table1 WHERE ...
然后检查总数是否为非零,或者像这样查询是否更好:
SELECT * FROM table1 WHERE ... LIMIT 1
并检查是否返回了任何行?
在这两个查询中,WHERE子句都使用索引。
我试图找出一行是否存在于一个表中。使用MySQL,是更好的做这样的查询:
SELECT COUNT(*) AS total FROM table1 WHERE ...
然后检查总数是否为非零,或者像这样查询是否更好:
SELECT * FROM table1 WHERE ... LIMIT 1
并检查是否返回了任何行?
在这两个查询中,WHERE子句都使用索引。
当前回答
有时,如果行存在,则获取该行的自动递增主键(id),如果不存在则获取0,这非常方便。
以下是如何在单个查询中完成的:
SELECT IFNULL(`id`, COUNT(*)) FROM WHERE ...
其他回答
COUNT(*)在MySQL中进行了优化,所以一般来说,前者查询可能更快。
或者您可以将原始sql部分插入到条件中 所以我有 “条件”= >阵列('成员。id不在(选择会员。member_id FROM memberships AS Membership)')
建议你不要使用Count,因为Count总是为db做额外的负载,使用SELECT 1,如果你的记录在那里,它返回1,否则它返回null,你可以处理它。
有时,如果行存在,则获取该行的自动递增主键(id),如果不存在则获取0,这非常方便。
以下是如何在单个查询中完成的:
SELECT IFNULL(`id`, COUNT(*)) FROM WHERE ...
你也可以试试EXISTS:
SELECT EXISTS(SELECT * FROM table1 WHERE ...)
根据文档,你可以选择任何东西。
传统上,EXISTS子查询以SELECT *开头,但也可以这样 以SELECT 5或SELECT column n1或任何东西开始。MySQL 在这样的子查询中忽略SELECT列表,所以没有区别。