【发布时间】:2018-08-02 18:03:09
【问题描述】:
我有下一个问题:
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,那么有人知道为什么会这样吗?为什么它只使用带有'='而不是'的索引
【问题讨论】:
-
我猜这只是优化器中的一个错误。我想这两个查询具有相同的执行计划。
-
你确定成本是这样的吗?我可以看到它发现
>条件永远不会为真,并且知道它没有真正做的工作,但那样会降低成本。我不会想到它会使用索引,除非你有一个涵盖名称和代码列的索引。 -
不要担心优化器所说的“成本”是什么。这不是你想的成本。您无法比较查询之间的成本。
标签: sql oracle grouping sql-execution-plan having-clause