如果我有疑问:
SELECT *
FROM products
WHERE (value & (POW(2, 24) - 1) > 0;
对于表中的每一行,查询引擎通常会执行(POW(2, 24) - 1)
次N次(假设value
未建立索引)吗?还是知道值不会改变并缓存并使用缓存的值足够聪明?它取决于数据库的实现吗?
答案 0 :(得分:2)
当然,这取决于数据库引擎。
但是,通常,数据库将在编译阶段评估常量表达式。这意味着将插入一个常量,而不是为每一行重新计算该值。视数据库和表达式而定,这种情况可能并不总是发生。
将使用常量对where
子句的每一行求值(该表达式不能使用索引)。