Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
Sql 为什么IsEqual(=)运算符比Oracle中的IsNotEqual(<;>;)运算符工作得更快?_Sql_Oracle - Fatal编程技术网

Sql 为什么IsEqual(=)运算符比Oracle中的IsNotEqual(<;>;)运算符工作得更快?

Sql 为什么IsEqual(=)运算符比Oracle中的IsNotEqual(<;>;)运算符工作得更快?,sql,oracle,Sql,Oracle,正如标题所说,如果有人有我想知道的答案。我一直在谷歌上搜索,但找不到直接的答案 例如: 这很有效 SELECT COUNT(*) FROM Table1 TB1, Table2 TB2 WHERE TB1.Field1 = TB2.Table2 这似乎需要几个小时 SELECT COUNT(*) FROM Table1 TB1, Table2 TB2 WHERE TB1.Field1 <> TB2.Table2 从表1 TB1、表2 TB2中选择计数(*) 其中TB1.Fie

正如标题所说,如果有人有我想知道的答案。我一直在谷歌上搜索,但找不到直接的答案

例如:

这很有效

SELECT COUNT(*) FROM Table1 TB1, Table2 TB2
WHERE TB1.Field1 = TB2.Table2 
这似乎需要几个小时

SELECT COUNT(*) FROM Table1 TB1, Table2 TB2
WHERE TB1.Field1 <> TB2.Table2 
从表1 TB1、表2 TB2中选择计数(*)
其中TB1.Field1 TB2.Table2

可能,第二个查询处理的行数比第一个多。

因为它们是不同的SQL语句。在第一个表中,您使用
Field1
Table2
字段连接两个表。可能会返回一些记录

在第二种情况下,您的查询可能会返回大量记录,因为您正在进行交叉连接,并且许多行将满足
Field1 Table2
条件

一个非常简单的例子

表1

Field1
------
1
2
5
9
表2

Table2
------
3
4
5
6
9
查询1将返回2,因为只有5和9是公共的

Query2将返回18,因为来自交叉联接的许多行都将计数

如果您有一个包含大量记录的表,则需要一段时间来处理第二个查询

(回想过去)

您是否正在尝试对
表1
中没有匹配记录的行进行计数
表2

如果是这样,你可以用这个

SELECT COUNT(*) FROM Table1 TB1
WHERE NOT EXISTS
     (SELECT * FROM Table2 TB2 
      WHERE TB1.Field1 = TB2.Field2 )
或者举个例子

SELECT COUNT(*)
FROM
(
SELECT Field1 FROM Table1 
MINUS
SELECT Field2 FROM Table2
) T

认识到SQL是一种声明性语言而不是命令式语言是很重要的。您描述了希望数据符合的条件,而不是应该如何执行这些比较。数据库的任务是找到最快的方式给您答案(由数据库接管的任务)。这意味着,查询中看似很小的更改可能会导致完全不同的查询计划,从而导致完全不同的运行时行为

=
比较可以转换为两个字段上的简单联接,并以相同的方式进行优化。这意味着可以使用普通索引非常快速地执行查询,可能不需要读取实际数据,而只使用索引


另一方面,
比较通常需要计算并检查完整的条件(可能有一种方法可以使用正确的索引对此进行优化,但通常索引在这里没有帮助)。它通常还会返回更多的结果,这会增加执行时间。

有趣!你的帖子很像Joachim Sauer的帖子。你的文章和他的文章结合得很好。谢谢你的解释。现在清楚多了。你的文章和巴勃罗的文章结合在一起很有意义。