我正在尝试找到确定表行是否存在的最有效方法。
我想到了3个选项:
SELECT EXISTS(SELECT 1 FROM table1 WHERE some_condition);
SELECT 1 FROM table1 WHERE some_condition LIMIT 0,1;
SELECT COUNT(1)FROM table1 WHERE some_condition;
对于MySQL来说,第一种方法似乎更有效: Best way to test if a row exists in a MySQL table
对于任何数据库一般都是如此吗?
更新:
我添加了第三个选项。
UPDATE2:
我们假设数据库产品是mysql,oracle和sql-server。
答案 0 :(得分:4)
我愿意
SELECT COUNT(1) FROM table 1 WHERE some_condition.
但是我不认为它会产生重大影响,除非你经常调用它(在这种情况下,我可能会使用不同的策略)。
答案 1 :(得分:4)
如果您的意思是在至少有一行存在某些条件(1或0,真或假)时用作测试,那么:
select count(1) from my_table where ... and rownum < 2;
Oracle可以在受到攻击后停止计数。
答案 2 :(得分:3)
存在更快,因为它将返回与子查询匹配的结果数,而不是整个结果。
答案 3 :(得分:3)
不同的方法有不同的优点和缺点:
SELECT EXISTS(SELECT 1 FROM table1 WHERE some_condition);
可能是MySQL上最快的,但是
SELECT COUNT(1) FROM table 1 WHERE some_condition
在@Luis的回答中给你计数。
更重要的是,我建议你看看你的业务逻辑:很少有必要只看一行是否存在,更多时候你会想要
INSERT .. ON DUPLICATE KEY
或REPLACE INTO
答案 4 :(得分:1)
exists函数通常在SQL中定义,它不仅仅是一个MySQL函数:http://www.techonthenet.com/sql/exists.php 我通常使用此函数来测试特定行是否存在。
然而在Oracle中,我曾多次看到过其他方法:
SELECT COUNT(1) FROM table 1 WHERE some_condition.