Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 测试表行是否存在的有效方法_Mysql_Sql_Sql Server_Performance_Oracle - Fatal编程技术网

Mysql 测试表行是否存在的有效方法

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. 但我

我试图找到最有效的方法来确定表行是否存在

我有三个选择:

选择Exists从表1中选择1,其中有一些条件

从表1中选择1,其中某些条件限制为0,1

从表1中选择COUNT1,其中有一些条件

对于MySQL,第一种方法似乎更有效:

对于任何数据库来说,这通常都是正确的吗

更新:

我添加了第三个选项

更新2:

让我们假设数据库产品是mysql、oracle和sql server。

我会这样做

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在受到攻击后可以停止计数。

你所说的任何数据库——任何数据库产品——到底是什么意思?我认为这是不可能回答的——每个产品的实现都会有很大的不同。你必须用你计划使用的每一种产品进行测试这也是我的感觉。但这只是一种感觉。