【问题标题】:Indexing aggregate function in SQLSQL中的索引聚合函数
【发布时间】:2017-12-06 12:25:08
【问题描述】:

我有以下 SQL 查询,我想使用索引对其进行优化。

select    ean,   count(nif)
from    produto   P,   fornece_sec   F where    P.ean   =   F.ean
group   by    P.ean
having    count(nif)   >   1

为 nif 使用索引有意义吗?

【问题讨论】:

  • 请标记您的 DBMS
  • 添加一些示例表数据和预期结果(作为格式化文本,而不是图像。)
  • 请学习如何使用现代显式JOIN 语法,而不是WHERE 子句中古老而过时的隐式连接
  • 我在作业中收到了这个问题。老师做了那个查询,写得太糟糕了,我什至无法在我的数据库上运行它,并要求编写索引。我的疑问是我应该索引 nif,如果是,什么类型的索引?哈希还是 b 树?集群还是非集群?请注意,九个可能的值中只有一个满足查询。

标签: sql postgresql indexing


【解决方案1】:

首先,学习如何使用显式join 语法正确编写查询:

select P.ean, count(nif)
from produto P join
     fornece_sec F 
     on P.ean = F.ean
group by P.ean
having count(nif) > 1;

然后——假设fornece_sec 中的所有eans 也在produto 中——你不需要join,因为你是通过join 键聚合的。因此,您可以将其简化为:

select F.ean, count(F.nif)
from fornece_sec F 
group by F.ean
having count(F.nif) > 1;

对于此版本的查询,您可以使用覆盖索引:fornece_sec(ean, nif)

【讨论】:

    猜你喜欢
    • 2021-08-28
    • 1970-01-01
    • 2011-03-13
    • 2017-05-10
    • 1970-01-01
    • 2020-04-13
    • 2013-08-14
    • 2016-02-24
    相关资源
    最近更新 更多