SQL WHERE 子句:短路评估?
SQL 是否在 WHERE 子句布尔表达式中采用短路计算? 简短的答案是:它是特定于数据库的。
ANSI SQL 2003 标准建议从左到右求值(“如果优先级不是由格式或括号决定的,则表达式的有效求值通常是从左到右执行的。”),但重要的是添加了一个关键的资格:“表达式是否实际上从左到右求值取决于实现,特别是当操作数或运算符可能导致引发条件时,或者如果可以在不完全求值所有部分的情况下确定表达式的结果表情。”
这意味着虽然许多数据库可以并且经常确实利用短路评估来进行性能优化(在总体结果已知时避免不必要的计算),但这并不能得到普遍保证.
数据库特定行为:
optimizer_switch
提供一定程度的控制。结论:
虽然 SQL WHERE 子句中的短路可以提高性能,但开发人员应避免依赖它来保证正确性。实际的评估顺序最终由数据库系统的实现和优化策略决定。 始终编写清晰、明确的 SQL,并且不要假设短路评估将在不同的数据库系统中一致地按预期运行。
以上是SQL的WHERE子句是否使用短路计算?的详细内容。更多信息请关注PHP中文网其他相关文章!