上下文(不一定要回答这个问题)
我们正在尝试针对SQL查询优化SPARQL的数据结构,并希望避免使用除N-Triples之外的数据格式进行连接操作的不必要比较。我们想要过滤掉与结果/连接无关的数据。运行时的关键是连接的大小,因此我们必须知道WHERE子句中的表达式是否在实际连接之前得到了评估。可能这是真的,但我们需要确定。
TL;博士
何时评估WHERE子句?标准是否完全指定了这个,还是留给实现?我读到了使用ON子句强制它。如果有人可以用适当的来源引用它,我会感到沮丧。
答案 0 :(得分:1)
SQL是一种描述正在生成的结果的语言。它没有描述生产它们的具体步骤。也就是说,SQL不是一种过程语言。
SQL引擎的一个非常重要的部分是优化器。这会将SQL语句转换为一系列步骤,通常最好将其理解为数据流。这些步骤可能涉及复杂的算法(例如并行的内存不足哈希表)或支持结构(如索引)。即使是简单的SQL语句也可以有许多不同的替代执行计划。
因此,您的问题没有答案,因为SQL语句的执行不是专门针对子句的。当然,这取决于底层数据库。一些数据库,如MySQL和MS Access,具有相当天真的优化器,通常很容易预测。其他如Postgres,Oracle,SQL Server,Teradata和DB2都有更复杂的优化器。
此外,我建议,如果您使用的是连接,那么请始终使用显式JOIN
运算符和ON
子句。