手动更改postgresql中的查询执行计划?

nav*_*ige 4 sql postgresql common-table-expression

是否可以在postgresql中手动更改执行计划的操作顺序?例如,如果我总是希望在过滤之前进行排序操作(尽管在正常使用postgresql时没有意义),是否可以通过例如更改操作的内部成本来手动强制执行?

如果我实现自己的功能怎么样?是否有可能始终在sql语句的最后执行这样的函数?

Erw*_*ter 6

使用子查询或CTE首先强制执行某些操作.喜欢:

SELECT *
FROM  (
   SELECT *
   FROM   tbl
   LIMIT  10
   ) x
ORDER  BY 1;
Run Code Online (Sandbox Code Playgroud)

当然,你需要了解自己在做什么.在示例中,我选择10个任意行,然后按第一列排序.
您可以连续使用多个子查询层或多个CTE.

与CTE相同的例子:

WITH x AS (
   SELECT *
   FROM   tbl
   LIMIT  10
   )
SELECT *
FROM   x
ORDER  BY 1;
Run Code Online (Sandbox Code Playgroud)

对于简单查询,子查询通常更快,CTE提供其他功能(例如在不同查询级别的多个位置重用相同的CTE).