【问题标题】:most efficient SQL query最高效的 SQL 查询
【发布时间】:2016-04-04 19:28:20
【问题描述】:

我有 2 张桌子:

T1 {
  id: string;
  school: string
}

T2 { 
  school_id: string; 
  student_id: string; 
  tuition_fee: double 
}

这 2 个表通过 T1.id 和 T2.school_id 关联。 T1 包含每所学校的信息。它相对较小。 T2 包含每个学生的学费信息。它可能很大(数百万条记录)。

编辑:

现在,我想知道哪 3 所学校向学生收取的学费最多。 假设 2 所学校从所有学生那里收取相同数额的总学费是不可能的。 我的解决方案如下:

  1. T2 中按 school_id 分组记录;
  2. 计算每组的学费总和;
  3. 按总和降序对组进行排序;
  4. 获得前三名。

我的问题是:

  1. 有更好的方法吗?
  2. 执行此操作最有效的 SQL 是什么?
  3. 为了提高速度还有其他需要考虑的因素吗?例如使用索引、视图等。

【问题讨论】:

  • 你的方法很好。这一切都应该在一个查询中完成。
  • @GordonLinoff,我的直觉告诉我可能不需要第 3 步中的排序...
  • 你确定你的问题是正确的吗?学费可能有联系。甚至,超过三所学校的顶级学费。那你应该返回什么?
  • 假设不存在这样的歧义。查看我的编辑。

标签: sql database algorithm optimization query-optimization


【解决方案1】:

如果您只想要 school_id 和费用的总和,一个选项是:

SELECT TOP 3
  SUM(tuition_fee) AS TOTAL_TUITION_FEE,
  school_id
FROM T2
GROUP BY school_id
ORDER BY TOTAL_TUITION_FEE DESC

如果您使用的是 SQL 服务器,您可以使用查询分析器(some info 在哪里找到它)查看如何提高性能,它会建议索引或其他提示。

这似乎不是一个很繁重的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 2013-10-08
    • 2020-08-31
    • 2014-01-29
    • 1970-01-01
    相关资源
    最近更新 更多