当前位置:  开发笔记 > 数据库 > 正文

SQL计划编译和真值表

如何解决《SQL计划编译和真值表》经验,为你挑选了0个好方法。

如果我有 NOT ( 1 <> 1 AND NULL <> 1 )

我可以看到SQL将其转化为执行计划XML: ( 1 = 1 OR NULL = 1)

如果你真的要评估前面的表达式,那么True AND Null它将是Null并将消除该行.但是,由于OR,编译后的表达式可以返回一行.

我可以假设这种类型的编译始终保证会发生吗?SQL Server永远不会尝试将复杂的逻辑推进到编译计划中?有关于此的一些文件吗?

这篇文章非常有用,但我只是错过了一个难题:https: //www.simple-talk.com/sql/learn-sql-server/sql-and-the-snare-of-three-valued -逻辑/

这是一个SQL示例

SELECT 1
FROM T T
    LEFT JOIN T2 T2 --t2 has zero rows
        ON T.id = t2.t_id
WHERE NOT ( T.id <> 99 AND T2.id <> 99 )

根据我的SQL经验,我知道在正常情况下(没有短路评估)T2.id <> 99有效地将左连接转换为内连接.这是我的行为最初预期.当这个过滤器实际工作时我很惊讶.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有