在提高绩效方面,如果我想得到公司中薪资最高的员工,我可以通过以下两种技术中的一种得到这一点。
order by子句,然后将结果限制为1select employee from employees order by salary desc limit 1; rank()窗口函数来实现这一点,并得到最低的等级。。
select employee from (
select employee, rank() over (order by salary desc) rnk from employees)
where rnk =1 我看到第一个解是最优的,因为我应用排序算法一次并得到答案。而不是从排序的临时数据中进行选择。
我需要专家的意见。
发布于 2022-01-22 18:08:36
SQL作为一种声明性语言,是关于“什么”,而不是“如何”。
因此,您需要声明想要得到的内容,这取决于您的代码以及作为特定的SQL引擎、系统配置、数据库配置、数据统计数据、收集的统计数据等等。
在某些SQL引擎中,您可能会提示数据库有关您喜欢的执行计划,但是,此提示可能会导致执行错误或被忽略。我甚至看到了执行计划没有反映数据库所做的一些优化的场景。
换句话说-
关于数据库如何执行2次查询的假设可能是完全错误的。
没有理由假设第二个查询将存储临时结果,甚至任何查询都将使用排序。
最后-
你想要达到的目标实际上是可以通过o(n)的复杂排序来完成的。
https://stackoverflow.com/questions/70807149
复制相似问题