私はさまざまなクエリをテストしています。ビットマップヒープスキャンとインデックススキャンを使用してdbを決定する方法が不思議です。ビットマップヒープスキャンとインデックススキャンはどのように決定されますか?
お客様作成インデックスcustomer_email_idx( varchar_pattern_ops);
ご覧のとおり、customersテーブル(dellstoreの例)があり、インデックスに電子メールの列を追加しています。
まずクエリはここにある:
電子メールなどの顧客から選択* 'ITQ%@dell.com'; - >インデックススキャンを使用してクエリ
は、クエリを分析し説明ここにある:
QUERY PLAN
---------------------------------------------------------------------------------------------------------------------------------
Index Scan using customers_email_idx on customers (cost=0.00..8.27 rows=2 width=268) (actual time=0.046..0.046 rows=0 loops=1)
Index Cond: (((email)::text ~>=~ 'ITQ'::text) AND ((email)::text ~<~ 'ITR'::text))
Filter: ((email)::text ~~ 'ITQ%@dell.com
'::text)
Total runtime: 0.113 ms
他のクエリはここにある:
は、電子メールのIT%のような顧客からの選択* @ dell.com '; - ビットマップヒープスキャン
と>クエリ は、クエリを分析し説明ここにある:
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------
Bitmap Heap Scan on customers (cost=4.54..106.77 rows=2 width=268) (actual time=0.206..0.206 rows=0 loops=1)
Filter: ((email)::text ~~ 'IT%@dell.com
'::text)
-> Bitmap Index Scan on customers_email_idx (cost=0.00..4.54 rows=29 width=0) (actual time=0.084..0.084 rows=28 loops=1)
Index Cond: (((email)::text ~>=~ 'IT'::text) AND ((email)::text ~<~ 'IU'::text))
Total runtime: 0.273 ms
ビットマップおよびインデックススキャンが、ここで使用されているなぜあなたはこの例を説明することはできますか?
ありがとうございます..
@ araqnidの回答とhttp: ://wiki.postgresql.org/images/4/45/Explaining_EXPLAIN.pdf 「インデックススキャン」を探します。キーは 'オプティマイザが選択可能なビットマップ・スキャン]です。 – dezso
この質問はdba.SEにうまく収まると思います。 –