首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当表达式不涉及列时,查询优化器是否将表达式转换为常量

当表达式不涉及列时,查询优化器是否将表达式转换为常量
EN

Stack Overflow用户
提问于 2012-05-05 18:07:27
回答 2查看 92关注 0票数 1

我有类似如下的查询:

代码语言:javascript
复制
-- MySQL Query
SELECT * FROM table1 WHERE start_date >= CURRENT_TIMESTAMP - INTERVAL 7 DAY

-- MSSQL Query
SELECT * FROM table1 WHERE start_date >= GETDATE() - 7

由于右侧的表达式不依赖于列值,我是否应该期望查询优化器将其优化为常量值,例如:

代码语言:javascript
复制
SELECT * FROM table1 WHERE start_date >= '2012-04-28 14:54:31'

或者我应该计算常量并使用代码构建查询。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-05 18:23:37

根据MySQL的NOW()函数( CURRENT_TIMESTAMP是其同义词)的文档:

NOW()返回一个常量时间,指示语句开始执行的时间。(在存储的函数或触发器中,NOW()返回函数或触发语句开始执行的时间。)这与SYSDATE()的行为不同,后者返回执行的确切时间。

因此,查询优化器会根据需要将其视为常量。用户可以在EXPLAIN输出中使用see this命令。

我不能为MSSQL说话,尽管也许this blog值得一读?

票数 2
EN

Stack Overflow用户

发布于 2012-05-05 18:15:56

右边有一个函数,而不是常量。每次都必须重新计算查询...

(我有没有漏掉一点??)

编辑

就像@Martin和@eggyval亲切地解释说,我确实漏掉了一点。这个问题显然不是关于编译时优化的,所以我把这句糟糕的话留下来作为纪念,以纪念像我这样的混蛋会发生什么……

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10460812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档