我通过解析分析得到了followig输出:
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如何解析此查询?
答案 0 :(得分:1)
请参阅PostgreSQL源代码中的initial_cost_nestloop和final_cost_nestloop,了解计算方法的确切算法。
优化器考虑了内部关系的第一次扫描和重复扫描之间的差异,以及对于反连接仅可以处理索引扫描的第一次匹配的事实。加入两个关系的CPU成本将添加到子计划成本之上。