Mysql 测试表行是否存在的有效方法
我试图找到最有效的方法来确定表行是否存在 我有三个选择: 选择Exists从表1中选择1,其中有一些条件 从表1中选择1,其中某些条件限制为0,1 从表1中选择COUNT1,其中有一些条件 对于MySQL,第一种方法似乎更有效: 对于任何数据库来说,这通常都是正确的吗 更新: 我添加了第三个选项 更新2: 让我们假设数据库产品是mysql、oracle和sql server。我会这样做Mysql 测试表行是否存在的有效方法,mysql,sql,sql-server,performance,oracle,Mysql,Sql,Sql Server,Performance,Oracle,我试图找到最有效的方法来确定表行是否存在 我有三个选择: 选择Exists从表1中选择1,其中有一些条件 从表1中选择1,其中某些条件限制为0,1 从表1中选择COUNT1,其中有一些条件 对于MySQL,第一种方法似乎更有效: 对于任何数据库来说,这通常都是正确的吗 更新: 我添加了第三个选项 更新2: 让我们假设数据库产品是mysql、oracle和sql server。我会这样做 SELECT COUNT(1) FROM table 1 WHERE some_condition. 但我
SELECT COUNT(1) FROM table 1 WHERE some_condition.
但我不认为这有什么大区别,除非你经常调用它。在这种情况下,我可能会使用不同的策略。Exists更快,因为它将返回与子查询匹配的结果数,而不是整个结果 exists函数通常在SQL中定义,它不仅仅是一个MySQL函数: 我通常使用这个函数来测试某一行是否存在 但是,在Oracle中,我已经多次看到以前建议的其他方法:
SELECT COUNT(1) FROM table 1 WHERE some_condition.
不同的方法有不同的优点和缺点:
SELECT EXISTS(SELECT 1 FROM table1 WHERE some_condition);
可能是MySQL上最快的,但是
SELECT COUNT(1) FROM table 1 WHERE some_condition
正如@Luis answer中所说的那样,它给出了计数
更重要的是,我建议您查看一下您的业务逻辑:很少有必要只查看行是否存在,但您更愿意这样做
或者使用这些行,所以只需选择并处理0行的情况
或者您需要更改这些行,在这种情况下,只需执行更新并检查受mysql\u影响的\u行即可
如果要插入一行(如果该行尚不存在),请查看INSERT。。在复制键上或替换为
如果至少有一行存在某些条件1或0(true或false),则要将其用作测试,则:
select count(1) from my_table where ... and rownum < 2;
Oracle在受到攻击后可以停止计数。你所说的任何数据库——任何数据库产品——到底是什么意思?我认为这是不可能回答的——每个产品的实现都会有很大的不同。你必须用你计划使用的每一种产品进行测试这也是我的感觉。但这只是一种感觉。