PostgreSQL:存在与左连接

2024-05-02

我多次听说 postgres 处理exists查询速度更快左连接. http://archives.postgresql.org/pgsql-performance/2002-12/msg00185.php http://archives.postgresql.org/pgsql-performance/2002-12/msg00185.php

这对于一个表聚合来说绝对是正确的。

但在我们的例子中,它们不止一个,并且使用以下命令构建相同的查询exists这使得 postgres 永远挂起:

explain 
SELECT count(DISTINCT "groups".id) AS count_all 
FROM "groups"
WHERE (exists(
    select * from products p where groups.id = p.group_id AND exists(
        select * from products_categories pc where p.id = pc.product_id AND pc.category_id in (2,3))) AND groups.id != 3) 

result:

 Aggregate  (cost=26413436.66..26413436.67 rows=1 width=4)
   ->  Seq Scan on groups  (cost=0.00..26413403.84 rows=13126 width=4)
         Filter: ((id <> 3) AND (subplan))
         SubPlan
           ->  Index Scan using index_products_on_group_id on products p  (cost=0.00..1006.13 rows=1 width=1483)
                 Index Cond: ($1 = group_id)
                 Filter: (subplan)
                 SubPlan
                   ->  Seq Scan on products_categories pc  (cost=0.00..498.49 rows=1 width=8)
                         Filter: ((category_id = ANY ('{2,3}'::integer[])) AND ($0 = product_id))

这就是执行时间极长的根本原因吗? 这是某种配置问题吗?

谢谢, 博格丹。


好吧,对于“groups”中的每一行,postgresql 都会对 products_categories 进行全面扫描,这并不好。不一定是配置问题,但也许可以在没有像这样的嵌套子查询的情况下声明查询?

SELECT count(DISTINCT "groups".id) AS count_all 
FROM "groups"
WHERE exists(
    select 1 from products p where groups.id = p.group_id
             join products_categories pc on pc.product_id = p.id
    where pc.category_id in (2,3)
    ) and groups.id <> 3

也确实products_categories有索引product_id?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL:存在与左连接 的相关文章

随机推荐

  • Windows Phone 8.1 中的 RadialGradientBrush?

    请告诉我如何在 Windows Phone 8 1 应用程序中创建 RadialGradientBrush 我试图在这里找到它 但没有这样的刷子 Windows UI Xaml Media 有任何想法吗 谢谢你 如果您不介意从 NuGet
  • 意外的解构行为,在更深层次解构时必须声明一个键两次[重复]

    这个问题在这里已经有答案了 我在 ES6 中进行一些解构 遇到了意想不到的情况 这是所发生事件的一个简单版本 let obj x y 5 let x y obj console log x x is not defined console
  • JSF 2.0 隐式导航,不同的观点

    我正在寻找对 JSF 2 0 隐式导航及其如何与视图一起工作的良好解释 更准确地说 我知道从操作方法中我可以返回一个字符串 它是操作的结果 如果存在文件名与结果匹配的 JSF 视图 那么这就是隐式导航 现在 我的问题是 如果从文件夹内的视图
  • ios 中的位置时间戳精度

    在分析 iOS 10 中的位置服务后 发现缓存行为存在一些不一致 定期 在我的例子中每 20 秒 获取位置会返回位置 但它们的时间戳不按时间顺序排列 这表明缓存位置可能有问题 因此 如果您通过位置时间戳检查准确性 最好也保存以前的时间戳 这
  • 使用 CSS 过渡动画 max-height

    我想创建一个仅由类名驱动的展开 折叠动画 javascript 用于切换类名 我正在上一堂课max height 4em overflow hidden 和另一个max height 255em 我也尝试过这个值none 根本没有动画 这个
  • 使用 Caliburn.Micro 将绑定选择更改为 ViewModel

    我们在一个新的 Silverlight 项目中使用了 Caliburn Micro 一切都运行良好 内置约定将按钮单击事件绑定到 viewModel 但我不确定处理数据网格和组合框上的 SelectionChanged 事件的最佳方法是什么
  • 如何停止supervisord.conf文件中指定的单个程序? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想使用supervisor来管理几个进程 我已经在supervisord conf文件中进行了更改 我想稍后停止一些程序 我尝试使用 s
  • 如何在 C# 2.0 中重写 lambda 表达式?

    MatchEvaluator evaluator match gt var splitPos match Value IndexOf var newValue match Value Substring 0 splitPos 2 Retri
  • 实体框架迁移 - 启用自动迁移以及添加的迁移

    我在我的项目中使用实体框架 4 3 迁移 我想使用自动迁移 以便当我对域对象和上下文类进行修改时 我的数据库会在运行项目时自动更新 到目前为止我已经完成了这个工作 除了自动迁移之外 我还想使用一些添加的迁移 并且我希望应用程序在运行应用程序
  • ffmpeg 用于屏幕捕获?

    所以我有一个小程序来捕获屏幕和计算机麦克风的声音 然后屏幕截图被编码为 ScreenVideo2 声音被编码为 AAC 如何使用 ffmpeg 逐帧混合 然后将混合输出发送到 wowza 媒体服务器 如果用ffmpeg无法完成 您能提供一些
  • System.DirectoryServices.Interop.UnsafeNativeMethods.IAds.GetInfo() 处的 FileNotFoundException

    我有这行简单的代码 var entry new DirectoryEntry WinNT DOMAIN MachineName Computer Console WriteLine entry Guid 实际上 路径是由命令行提供的 这个简
  • 罐子不匹配!修复使用 appcompat_v7 和 Facebook sdk 时的依赖关系。

    我在我的项目中使用 appcompat v7 库和 facebook sdk 并且这两个库都有 android support v4 jar 如果我删除任何 jar 则相应的库将无法工作 并且不允许同时拥有这两个 jar 我应该怎么办 请帮
  • 从 UIButton 调用类外部的函数

    我有一个函数 我想在按下按钮时调用它 但与我迄今为止所做的任何事情不同 我希望能够从多个 ViewController 中的任何一个访问它 我不想在每个 ViewController 中重复相同的代码块 我尝试在 ViewControlle
  • 使用简单的 UPDATE 查询“不支持 DML 操作”

    我收到错误Not supported for DML operations当我使用以下 HQL 时 Query UPDATE WorkstationEntity w SET w lastActivity timestamp WHERE w
  • Hilt:为什么是 ActivityRetainedScoped 与 ViewModelScoped

    我试图理解为什么ActivityRetainedScoped为希尔特的 DI 引入 在我看来 范围与ViewModelScoped应该做 我的印象是作用域是这样工作的 AppScope singleton gt ViewModelScope
  • Javascript:如何简化具有多个 OR 条件的 if 语句?

    很抱歉 如果我在写这篇文章时犯了错误 我是新来的 不知道这是如何工作的 希望我能尽快学会 我也是 JavaScript 新手 所以问题是 我有这个代码 elements js文件 我无法让它工作 放这个有用吗 if codePrompt c
  • 致命错误:iostream:没有这样的文件或目录#include

    我在学习C 的时候遇到了一个问题 编译的时候遇到了错误 The details are as follows You seem to have not installed C support in MinGW If you are usin
  • GoDaddy 服务器上的 CodeIgniter 和 URI 问题

    我似乎无法在 GoDaddy 上正确设置 CodeIgniter 我尝试在 wecome 控制器内创建一个新函数 但我无法在任何地方访问它 http domain com test No response lt why doesn t th
  • Linux 中的 Swift arc4random_uniform(max)

    我在 Ubuntu 中使用 Swift 收到一条错误消息 指出 arc4random 是一个无法解析的标识符 有关此已知错误的更多信息here https bugs swift org browse SR 685 基本上 该功能仅存在于 B
  • PostgreSQL:存在与左连接

    我多次听说 postgres 处理exists查询速度更快左连接 http archives postgresql org pgsql performance 2002 12 msg00185 php http archives postg