您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

“泪不为零”和“不为零”之间的区别是什么?

“泪不为零”和“不为零”之间的区别是什么?

没有区别。

在我看来,性能可能有所不同。有人愿意对此进行详细说明吗?

所有主要搜索引擎(即MysqLsql ServerOraclePostgresql)将合并在分析阶段,从他们制作计划相同,这些谓词。

这些条件的处理比仅以一个或另一个顺序应用运算符更为复杂。

例如,在中OracleIS NOT NULL(或NOT IS NULL)条件表示有可能使用索引,因此查询如下:

SELECT  column
FROM    mytable
WHERE   column IS NOT NULL

将最有可能使用来执行index fast full scan,而在运行时NULL不会进行任何其他检查(因为这些值不会进入索引,因此没有必要对其进行检查)。

即使需要检查每个记录,检查的顺序也将由优化器定义(而不是由谓词和运算符出现在WHERE子句中的顺序)。

例如,这是一个Oracle查询计划:

sql> EXPLAIN PLAN FOR
  2  
  2  SELECT *
  3  FROM   t_test
  4  WHERE  NOT column IS NULL
  5  /

Explained

sql> SELECT  *
  2  FROM    TABLE(DBMS_XPLAN.display())
  3  /

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 958699830
----------------------------------------------------------------------------
| Id  | Operation         | Name   | Rows  | Bytes | Cost (%cpu)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |        |    30 |  1260 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T_TEST |    30 |  1260 |     3   (0)| 00:00:01 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("COLUMN" IS NOT NULL)

如您所见,的内容filter已在内部翻译成IS NOT NULLOracle与大多数评论者似乎都认为是更合适的形式)

正如乔纳森·莱夫勒(Jonathan Leffler)所指出的,在评估元组(与单列相对)时,这些是不同的。

由混合值NULL和非NULL值组成的元组既不是aNULL也不是a NOT NULL

Postgresql支持针对元组的谓词)中,这两个表达式:

SELECT  (1, NULL) IS NULL
SELECT  (1, NULL) IS NOT NULL

评估为假。

其他 2022/1/1 18:45:09 有494人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶