sql - Explain Analyze 上嵌套反循环的成本

标签 sql performance postgresql explain

我通过解释分析得到以下输出:

Nested Loop Anti Join  (cost=0.00..36.92 rows=83 width=3) (actual time=0.303..1 0.631 rows=83 loops=1)
->  Seq Scan on paises p  (cost=0.00..5.46 rows=246 width=3) (actual time=0.0 43..0.336 rows=246 loops=1)
->  Index Scan using ciudades_pkey on ciudades c  (cost=0.00..12.92 rows=192 width=3) (actual time=0.038..0.038 rows=1 loops=246)
      Index Cond: (c.pais_codigo = (p.pais_codigo)::bpchar)
Total runtime: 10.897 ms
(5 rows)

我不明白为什么循环反加入成本是 36.92。

在其他网站上,我看到了循环的公式:上层扫描成本 + 上层行 * 内部成本。

但我得到的成本是 36.92,所以没办法。 dbmanager 如何解决这个查询?

最佳答案

参见 initial_cost_nestloop和 PostgreSQL 源代码中的 final_cost_neSTLoop 以了解其计算方式的确切算法。

优化器正在考虑内部关系的第一次扫描和重复扫描之间的差异,以及对于反连接,只有索引扫描的第一个匹配可能被处理的事实。加入这两个关系的 CPU 成本被添加到子计划成本之上。

关于sql - Explain Analyze 上嵌套反循环的成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13240724/

相关文章:

php - mysql全文搜索的最佳设置

c++ - boost::intrusive::unordered_set 桶中使用的是什么存储策略?

java - 使用 jooq 插入间隔数据

mysql - 从 EXCEL 连接到 SQL 数据库

php - 有 2 个查询的待处理时间表检查功能不起作用

MySQL:BTREE 慢速索引路径(表大小:723704015 行)

postgresql - 使用 pg Promise 在事务中将多行插入到多个表中

java - 如何在 Netbeans JavaDB 中使用 SQL RANDOM() 函数

performance - MongoDB + SpringData 查询非常慢

sql - 如何按 a、b 进行分组并返回 b 的 N 行集