Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
Oracle (';xyz';!=';xyz';)和非(';xyz';=';xyz';)之间有什么区别_Oracle_Performance_Optimization_Query Optimization - Fatal编程技术网

Oracle (';xyz';!=';xyz';)和非(';xyz';=';xyz';)之间有什么区别

Oracle (';xyz';!=';xyz';)和非(';xyz';=';xyz';)之间有什么区别,oracle,performance,optimization,query-optimization,Oracle,Performance,Optimization,Query Optimization,('xyz'!='xyz')和之间有什么区别吗('xyz'='xyz') 虽然我是在Oracle DB的上下文中询问的,但我也想知道其他语言中的相同情况 差异主要包括处理速度和所有的背景材料。你看到有什么不同吗 测试用例: SQL> SELECT * FROM dual 2 WHERE ('xyz' != 'xyz'); no rows selected SQL> SQL> SELECT * FROM dual 2 WHERE NOT ('xyz' = 'xyz

('xyz'!='xyz')
之间有什么区别吗('xyz'='xyz')

虽然我是在Oracle DB的上下文中询问的,但我也想知道其他语言中的相同情况


差异主要包括处理速度和所有的背景材料。

你看到有什么不同吗

测试用例:

SQL> SELECT * FROM dual
  2  WHERE ('xyz' != 'xyz');

no rows selected

SQL>
SQL> SELECT * FROM dual
  2  WHERE NOT ('xyz' = 'xyz');

no rows selected
SQL> EXPLAIN PLAN FOR
  2  SELECT * FROM dual
  3  WHERE ('xyz' != 'xyz');

Explained.

SQL>
SQL> SELECT * FROM TABLE(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3752461848

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |     2 |     0   (0)|          |
|*  1 |  FILTER            |      |       |       |            |          |
|   2 |   TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
---------------------------------------------------

   1 - filter(NULL IS NOT NULL)

14 rows selected.

SQL>
SQL> EXPLAIN PLAN FOR
  2  SELECT * FROM dual
  3  WHERE NOT ('xyz' = 'xyz');

Explained.

SQL>
SQL> SELECT * FROM TABLE(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3752461848

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |     2 |     0   (0)|          |
|*  1 |  FILTER            |      |       |       |            |          |
|   2 |   TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
---------------------------------------------------

   1 - filter(NULL IS NOT NULL)

14 rows selected.

SQL>
在上述两个查询中,应用的筛选器都是相同的筛选器(NULL不是NULL)

执行计划:

SQL> SELECT * FROM dual
  2  WHERE ('xyz' != 'xyz');

no rows selected

SQL>
SQL> SELECT * FROM dual
  2  WHERE NOT ('xyz' = 'xyz');

no rows selected
SQL> EXPLAIN PLAN FOR
  2  SELECT * FROM dual
  3  WHERE ('xyz' != 'xyz');

Explained.

SQL>
SQL> SELECT * FROM TABLE(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3752461848

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |     2 |     0   (0)|          |
|*  1 |  FILTER            |      |       |       |            |          |
|   2 |   TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
---------------------------------------------------

   1 - filter(NULL IS NOT NULL)

14 rows selected.

SQL>
SQL> EXPLAIN PLAN FOR
  2  SELECT * FROM dual
  3  WHERE NOT ('xyz' = 'xyz');

Explained.

SQL>
SQL> SELECT * FROM TABLE(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3752461848

---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |     1 |     2 |     0   (0)|          |
|*  1 |  FILTER            |      |       |       |            |          |
|   2 |   TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
---------------------------------------------------

   1 - filter(NULL IS NOT NULL)

14 rows selected.

SQL>

没有区别。

Hmmm。。。您似乎假设OP询问的是文本值
'xyz'
,这没有多大意义(显然
'xyz'
等于
'xyz'
)。在您的例子中,优化程序能够完全消除谓词,但这只是因为表达式只有文字值。无可否认,这个问题措辞拙劣,我完全同意你的看法。OP对这个问题的措辞过于笼统。只要证明
1=1
总是正确的,就不难了;-)我希望这个问题在一个更具体的用例中是具体的。这就是我添加解释计划的原因。这就是为什么我倾向于在开始回答之前先问清楚问题:)嗯……有时并非所有的日子都是一样的;-)有几天,我的手指在我的思想前面。正如你所看到的,从Lalit的回答中,答案显然是“不”,因为你的文字值是相同的。我怀疑你实际上指的是更一般的情况,例如,
(:bind1!=:bind1)
vs
不是(:bind1=:bind1)
-我说的对吗?是的,实际上我指的是更一般的情况。答案是一样的:如果:bind不是null,那么两个表达式的结果都是TRUE。如果:bind为null,则两个表达式的结果都是未知的。我的回答针对这个问题,并且非常针对所涉及的文本。总的来说,这是一个过于宽泛的问题,因此总体而言,我的回答足以满足OP的需要。无论如何,如果它在问题的范围内回答,我希望它被标记为已回答。对于这个问题,好的,你的回答足以解释,但正如你也说过的,我也希望它被认为是广义的。谢谢