pgsqlはIN()条件の給力に対してサポートします。
1491 ワード
pgsqlのクエリプランナーは、条件をインテリジェントに分解することができるからです。
INの状況はどうですか?
explinの結果は思ったより分解ではなくpgsqlの配列タイプを使って処理されました。
手動分解より効率が高い!
mysqlにとって、二つの方法は違いません。その調査の最適化器は知能と強大さがなく、ORさえ分解できないです。だから优化器と言って、企画器ではありません。人の肉で最適化をします。
SELECT * FROM tk WHERE tk.id = 1 OR tk.id = 2
プログラムは、索引のあるIDフィールドに対するクエリーを2つにスマートに分解し、UNIONします。INの状況はどうですか?
SELECT * FROM tk WHERE tk.id IN (1,2,3)
explinの結果は思ったより分解ではなくpgsqlの配列タイプを使って処理されました。
Bitmap Heap Scan on tk (cost=12.77..21.82 rows=3 width=72)
Recheck Cond: (id = ANY ('{1,2,3}'::integer[]))
-> Bitmap Index Scan on tk_pkey (cost=0.00..12.77 rows=3 width=0)
Index Cond: (id = ANY ('{1,2,3}'::integer[]))
Time: 0.015s
手動分解より効率が高い!
SELECT * FROM tk WHERE tk.id = 1 OR tk.id = 2 OR tk.id =3
Bitmap Heap Scan on tk (cost=12.78..21.83 rows=3 width=72)
Recheck Cond: ((id = 1) OR (id = 2) OR (id = 3))
-> BitmapOr (cost=12.78..12.78 rows=3 width=0)
-> Bitmap Index Scan on tk_pkey (cost=0.00..4.26 rows=1 width=0)
Index Cond: (id = 1)
-> Bitmap Index Scan on tk_pkey (cost=0.00..4.26 rows=1 width=0)
Index Cond: (id = 2)
-> Bitmap Index Scan on tk_pkey (cost=0.00..4.26 rows=1 width=0)
Index Cond: (id = 3)
Time: 0.047s
mysqlにとって、二つの方法は違いません。その調査の最適化器は知能と強大さがなく、ORさえ分解できないです。だから优化器と言って、企画器ではありません。人の肉で最適化をします。