小编aar*_*ron的帖子

使用IN vs NOT IN时Postgresql的巨大性能差异

我有2张桌子,"transaksi"和"buku"."transaksi"有大约250k行,buku大约有170k行.两个表都有名为"k999a"的列,两个表都不使用索引.现在我检查这两个陈述.

声明1:

explain select k999a from transaksi where k999a not in (select k999a from buku);
Run Code Online (Sandbox Code Playgroud)

声明1输出:

 Seq Scan on transaksi  (cost=0.00..721109017.46 rows=125426 width=9)
   Filter: (NOT (SubPlan 1))
   SubPlan 1
     ->  Materialize  (cost=0.00..5321.60 rows=171040 width=8)
           ->  Seq Scan on buku  (cost=0.00..3797.40 rows=171040 width=8)
Run Code Online (Sandbox Code Playgroud)

声明2:

explain select k999a from transaksi where k999a in (select k999a from buku);
Run Code Online (Sandbox Code Playgroud)

声明2输出:

Hash Semi Join  (cost=6604.40..22664.82 rows=250853 width=9)
   Hash Cond: (transaksi.k999a = buku.k999a)
   ->  Seq Scan on transaksi  (cost=0.00..6356.53 rows=250853 width=9)
   ->  Hash  (cost=3797.40..3797.40 rows=171040 width=8) …
Run Code Online (Sandbox Code Playgroud)

postgresql explain sql-execution-plan

2
推荐指数
1
解决办法
520
查看次数

标签 统计

explain ×1

postgresql ×1

sql-execution-plan ×1