首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于成本的优化器与不可能查询

基于成本的优化器与不可能查询
EN

Stack Overflow用户
提问于 2017-10-28 17:57:40
回答 1查看 70关注 0票数 0

下面的SQL中的查询是有效的查询,但是由于表上的约束,表中永远不可能有匹配where子句的数据。

我在Postgres中对这两个查询运行了explain,看起来CBO不知道这个事实,并打算执行这些查询。我会假设它会认识到不可能有任何数据,甚至不会尝试。

代码语言:javascript
运行
复制
create table myTest ( a char(1) not null, b integer);
insert into myTest values ('A',1), ('B',2), ('C',3);
select * from myTest where A = ‘Texas’;
select * from myTest where A is null;

我已经搜索了信息,我发现了很多关于CBO如何工作的深层次信息,但对此我什么也没有发现。我本来希望看到一个CBO参数,上面写着“跳过不可能的查询”。

我知道不同的CBO会有不同的效果,但是总的来说,优化器真的没有考虑到这些信息吗?若否,原因为何?

EN

回答 1

Stack Overflow用户

发布于 2017-10-28 18:03:23

这看起来不太可能。基于成本的优化器在很大程度上实现了它们的名称--它们使用表上的统计信息(或估计的统计信息)来选择运行查询的最佳算法。

他们对约束的使用非常有限它们可能考虑到独特的约束,但这可能是通过索引而不是约束。

他们为什么不这么做?我想写数据库优化器的人正试图解决“更难”的问题。如果将单个字符与'Texas'进行比较,那么查询作者应该知道这一点。

此外,还可以缓存查询计划。可以删除约束。通常,我不认为添加或删除约束会使缓存的查询计划无效。

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

https://stackoverflow.com/questions/46992789

复制
相关文章

相似问题

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