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

标签 sql postgresql common-table-expression

是否可以在 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/

相关文章:

php - SQL - 在任意级别加入树时是否有推荐的方法?

sql - 使用 SQL Server 递归公用表表达式获取文件夹中所有文件的完整路径(带子文件夹)

sql - Informix - 两个日期之间

c++ - 直接使用 postgres JSONB

mysql - 如何使用XXX分组,正确使用聚合函数?有最小值

sql - 名称为 'count' 的计数列返回多行。为什么?

sql - 如何在 Postgresql 中使用 AM/PM 获取 now() 时间

sql-server - SQL Server CTE层次结构问题

mysql - 带左连接的sql最小值

sql - 名字或姓氏大小写更改查询,不会产生意外后果。