我有如下所示的查询。
SELECT * FROM table WHERE A AND B
其中A和B是条件(B比A慢)。
有没有人知道A和B是否会一直被评估,或者B是否只在A被评估为'true‘时才被评估?
非常感谢
帕特里克
发布于 2022-08-11 16:51:18
这种行为,你认为是所谓的“短路评估”。
在stackOverflow上已经有很多关于这个主题的条目,例如这里。但简而言之:你不知道!请参阅PostgreSQL文档这里。上面写着:
没有定义子表达式的求值顺序。特别是,运算符或函数的输入不一定是从左到右或按任何其他固定顺序计算的。此外,如果只能通过计算表达式的某些部分来确定表达式的结果,则可能根本不计算的其他子表达式。
如果您继续阅读文档,那么您将看到文档始终像这样模糊。
因此,摘要:一般来说,SQL是声明性的,这意味着您可以告诉数据库框架您想要什么,但不能告诉您希望如何计算它。该系统可以在这方面自由作出选择。
https://stackoverflow.com/questions/73323579
相似问题