Sql 具有和的成本查询>;
我有下一个问题:Sql 具有和的成本查询>;,sql,oracle,grouping,sql-execution-plan,having-clause,Sql,Oracle,Grouping,Sql Execution Plan,Having Clause,我有下一个问题: select code from user group by code having sum(case when name= 'A' then 1 end) > sum(case when name= 'A' then 1 end) 如果我检查查询的成本,它会说是180,但是如果我使用“=”而不是>,成本是1,那么有人知道为什么会发生这种情况吗?为什么只使用带“=”的索引而不使用带“的索引?这是一个真正的查询吗?我这样问是因为查询无效-ha
select code
from user
group by code
having
sum(case when name= 'A' then 1 end) >
sum(case when name= 'A' then 1 end)
如果我检查查询的成本,它会说是180,但是如果我使用“=”而不是>,成本是1,那么有人知道为什么会发生这种情况吗?为什么只使用带“=”的索引而不使用带“的索引?这是一个真正的查询吗?我这样问是因为查询无效-having子句等于写入
1>1
,所以总是False。。。如果将“>”替换为“=”,则除非sum()的结果为NULL,否则查询始终为true…我猜这只是优化器中的一个错误。我可以想象这两个查询具有相同的执行计划。您确定成本是这样的吗?我可以看到它发现
条件永远不可能是真的,并且知道它没有真正需要做的工作,但是这样会得到低成本。我不会想到它会对这两个列使用索引,除非您有一个同时包含名称和代码列的索引。不要担心优化器会说什么“成本”是什么。这不是你考虑的成本。您无法比较查询之间的成本。