是否可以在 postgresql 中手动更改执行计划的操作顺序?例如。如果我总是想在过滤之前进行排序操作(尽管在正常使用 postgresql 时它没有意义),是否可以通过例如手动强制执行该操作改变运营的内部成本?
如果我实现自己的功能呢?有没有可能让这样的函数一直在sql语句的最后执行?
最佳答案
使用子查询或 CTE首先强制执行某些操作。喜欢:
SELECT *
FROM (
SELECT *
FROM tbl
LIMIT 10
) x
ORDER BY 1;
当然,您需要了解您在做什么。在示例中,我选择了 10 个任意行,然后按第一列对它们进行排序。
您可以连续使用多层子查询或多个 CTE。
与 CTE 相同的示例:
WITH x AS (
SELECT *
FROM tbl
LIMIT 10
)
SELECT *
FROM x
ORDER BY 1;
对于简单查询,子查询通常更快,CTE 提供额外的功能(比如在不同查询级别的多个地方重用相同的 CTE)。
关于sql - 手动更改postgresql中查询的执行计划?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14982120/