首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用order ()窗口函数还是使用秩()窗口函数,哪种解决方案是最优的?

使用order ()窗口函数还是使用秩()窗口函数,哪种解决方案是最优的?
EN

Stack Overflow用户
提问于 2022-01-21 20:11:52
回答 1查看 27关注 0票数 0

在提高绩效方面,如果我想得到公司中薪资最高的员工,我可以通过以下两种技术中的一种得到这一点。

  • 选择员工并应用order by子句,然后将结果限制为1

代码语言:javascript
复制
select employee from employees order by salary desc limit 1; 

  • 或我可以通过使用rank()窗口函数来实现这一点,并得到最低的等级。

代码语言:javascript
复制
select employee from (
       select employee, rank() over (order by salary desc) rnk from employees)
where rnk =1 

我看到第一个解是最优的,因为我应用排序算法一次并得到答案。而不是从排序的临时数据中进行选择。

我需要专家的意见。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-22 18:08:36

SQL作为一种声明性语言,是关于“什么”,而不是“如何”

因此,您需要声明想要得到的内容,这取决于您的代码以及作为特定的SQL引擎、系统配置、数据库配置、数据统计数据、收集的统计数据等等。

在某些SQL引擎中,您可能会提示数据库有关您喜欢的执行计划,但是,此提示可能会导致执行错误或被忽略。我甚至看到了执行计划没有反映数据库所做的一些优化的场景。

换句话说-

关于数据库如何执行2次查询的假设可能是完全错误的。

没有理由假设第二个查询将存储临时结果,甚至任何查询都将使用排序。

最后-

你想要达到的目标实际上是可以通过o(n)的复杂排序来完成的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70807149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档