Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 具有和的成本查询>;_Sql_Oracle_Grouping_Sql Execution Plan_Having Clause - Fatal编程技术网

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…

我猜这只是优化器中的一个错误。我可以想象这两个查询具有相同的执行计划。您确定成本是这样的吗?我可以看到它发现
条件永远不可能是真的,并且知道它没有真正需要做的工作,但是这样会得到低成本。我不会想到它会对这两个列使用索引,除非您有一个同时包含名称和代码列的索引。不要担心优化器会说什么“成本”是什么。这不是你考虑的成本。您无法比较查询之间的成本。