| 识别号|参考编号|姓名|薪金|
| - ------|- ------|- ------|- ------|
| 1个|Dummy1|史密斯|小行星5487|
| 第二章|Dummy2|蒂姆|小行星3123|
| 三个|Dummy1|史密斯|四三二四|
| 四个|Dummy4|史蒂夫|九九五七七|
| 五个|Dummy5|马特|五五五一四四四|
| 六个|Dummy2|蒂姆|432112|
| 七|Dummy7|布拉德|八九八九七|
| 八个|Dummy3|凯文|123213|
| 九|Dummy3|凯文|小行星7878|
| 十个|Dummy3|凯文|四三五五五|
| 十一|Dummy2|蒂姆|四三二|
| 十二|Dummy8|杰瑞|三二一二三|
| 十三|Dummy8|杰瑞|四三四三四|
| 十四|Dummy9|盖勒|8989897|
| 十五|Dummy2|蒂姆|1234|
| 十六|Dummy6|杰夫|8989987|
| 十七|Dummy1|史密斯|545453|
| 十八|Dummy2|蒂姆|小行星6464|
| 十九|Dummy2|蒂姆|四三五三五|
| 二十个|Dummy1|史密斯|64643|
| 二十一|Dummy8|杰瑞|九九五|
我的表中有上述数据,哪个查询更有效,更快地获取数据.我所需的数据是得到Dummy2
的Salary
,其中Id
是最大值,即Dummy 2的最新工资.
注:这是一个数据超过500万的审计表。
查询1:
select a.Name,
a.Salary
from table a
where a.REF_NO = 'Dummy2'
and a.ID = (select max(id) from table where REF_NO = a.REF_NO)
查询2:
select Name,
Salary
from table
where REF_NO = 'Dummy2'
order by ID desc
fetch first row only
3条答案
按热度按时间0s0u357o1#
它们是不同的查询,并且假设您可以有重复的
id
,将产生不同的结果,因此您不能轻松地比较它们。即使存在重复的
id
,也最多返回一行。您可以实现查询:
作为:
并将返回给定
ref_no
的重复最新id
的行数。u59ebvdq2#
查询1和查询2给出的结果相同,但查询2的效率比查询1高,原因是查询1的开销更大,因为查询1中包含子查询。
piztneat3#
[按照MT 0的建议编辑-具有唯一ID值的全新表]
(Code我以前发布的仍然可以在 * 编辑 * 链接后面访问)
(OK,580万与我之前使用的33亿相去甚远,但也几乎是OP提到的三倍(200万)
表格内容:
现在我们来比较一下:
没有区别(我运行了几次)。
正如我之前评论的那样,你不能指望在小数据集上有任何差异,200万(或600万)并不多。