SQL是否在每一行执行条件的地方?

时间:2019-11-16 16:53:50

标签: sql

如果我有疑问:

SELECT *
FROM products
WHERE (value & (POW(2, 24) - 1) > 0;

对于表中的每一行,查询引擎通常会执行(POW(2, 24) - 1)次N次(假设value未建立索引)吗?还是知道值不会改变并缓存并使用缓存的值足够聪明?它取决于数据库的实现吗?

1 个答案:

答案 0 :(得分:2)

当然,这取决于数据库引擎。

但是,通常,数据库将在编译阶段评估常量表达式。这意味着将插入一个常量,而不是为每一行重新计算该值。视数据库和表达式而定,这种情况可能并不总是发生。

将使用常量对where子句的每一行求值(该表达式不能使用索引)。