如何在Postgresql中正确使用FETCH FIRST?
我试图找出如何只选择select查询的第一个元素 似乎很多人使用限制1只选择第一个,但这似乎不是最好的方法如何在Postgresql中正确使用FETCH FIRST?,postgresql,Postgresql,我试图找出如何只选择select查询的第一个元素 似乎很多人使用限制1只选择第一个,但这似乎不是最好的方法 我正在阅读Postgresql文档中的SELECT,似乎有一个FETCH语句的选项,但我在网上找不到任何示例,有人能给我解释一下如何正确使用它吗?以下语句是等效的: SELECT * FROM foo LIMIT 10; 及 行可以与行互换,这使得获取1在语法上更加一致 FETCH FIRST X ROWS ONLY是SQL标准的一部分,而据我回忆,LIMIT不是LIMIT非常流行,而且
我正在阅读Postgresql文档中的SELECT,似乎有一个FETCH语句的选项,但我在网上找不到任何示例,有人能给我解释一下如何正确使用它吗?以下语句是等效的:
SELECT * FROM foo LIMIT 10;
及
行
可以与行
互换,这使得获取1在语法上更加一致
FETCH FIRST X ROWS ONLY
是SQL标准的一部分,而据我回忆,LIMIT
不是LIMIT
非常流行,而且更加简洁,因此postgres也支持它
编辑以添加:这两个语句仅在语法上不同。它们生成完全相同的计划:
=# explain select * from foo fetch first 10 row only;
QUERY PLAN
-------------------------------------------------------------
Limit (cost=0.00..0.22 rows=10 width=68)
-> Seq Scan on foo (cost=0.00..18.50 rows=850 width=68)
=# explain select * from foo limit 10;
QUERY PLAN
-------------------------------------------------------------
Limit (cost=0.00..0.22 rows=10 width=68)
-> Seq Scan on foo (cost=0.00..18.50 rows=850 width=68)
就性能而言,这两者是相同的吗?他们只是做同样的事,但用词不同是的,完全一样。纯粹是句法上的差异。我已经发布了上面相同的解释计划(针对我的简单查询和小测试表)。尝试对具有多行的表执行测试,我认为DB之所以选择Seq scan是因为记录数小。为什么存在这两种语法?一种是SQL标准,另一种是流行但非标准的扩展。后者并非起源于博士后,但他们最终还是支持了它。如果你需要例子的话,那就是它。但是如果您只需要查询的第一行,那么使用
limit
是最好的方法(在大多数情况下)。@Abelisto best?这是一种古老的非标准方式。
=# explain select * from foo fetch first 10 row only;
QUERY PLAN
-------------------------------------------------------------
Limit (cost=0.00..0.22 rows=10 width=68)
-> Seq Scan on foo (cost=0.00..18.50 rows=850 width=68)
=# explain select * from foo limit 10;
QUERY PLAN
-------------------------------------------------------------
Limit (cost=0.00..0.22 rows=10 width=68)
-> Seq Scan on foo (cost=0.00..18.50 rows=850 width=68)