【问题标题】:Cost Query with having and >具有和的成本查询 >
【发布时间】: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


【解决方案1】:

这是一个真正的查询吗?我问是因为查询无效 - 有子句等于写 1 > 1,所以总是 False...如果你用 '=' 替换 '>' 查询总是 true 除非 sum() 的结果是空...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    相关资源
    最近更新 更多