15. インデクス作成
• zipにbtreeインデクス
• addr3にhashインデクス
データベースシステム論 第 回2016 [ 12 ] 15p.
CREATE INDEX idx_zipcode2_zip
ON zipcode2
USING btree (zip);
CREATE INDEX idx_zipcode2_addr3
ON zipcode2
USING hash (addr3);
一件UNIQUEを付けられそうですが郵便番号を共有している異なる住所があります
17. 効果測定1 btree & 等価検索
データベースシステム論 第 回2016 [ 12 ] 17p.
QUERY PLAN
------------------------------------------------------------
Seq Scan on zipcode (cost=0.00..3566.79 rows=1 width=100)
Filter: (zip = 4328011)
(2 行)
QUERY PLAN
------------------------------------------------------------
-----------------------
Index Scan using idx_zipcode2_zip on zipcode2 (cost=0.42..8.44 rows=1
width=100)
Index Cond: (zip = 4328011)
(2 行)
3566.79 8.44vs無し 有り
EXPLAIN SELECT * FROM zipcode WHERE zip = 4328011;
EXPLAIN SELECT * FROM zipcode2 WHERE zip = 4328011;
Win!
18. 効果測定2 btree&範囲検索
データベースシステム論 第 回2016 [ 12 ] 18p.
QUERY PLAN
------------------------------------------------------------
Seq Scan on zipcode (cost=0.00..3875.35 rows=1 width=100)
Filter: ((zip >= 4328011) AND (zip <= 4328066))
(2 行)
QUERY PLAN
------------------------------------------------------------
-----------------------
Index Scan using idx_zipcode2_zip on zipcode2 (cost=0.42..8.44 rows=1
width=100)
Index Cond: ((zip >= 4328011) AND (zip <= 4328066))
(2 行)
3875.35 8.44vs無し 有り
EXPLAIN SELECT * FROM zipcode WHERE zip >= 4328011 AND zip <= 4328066 ;
EXPLAIN SELECT * FROM zipcode2 WHERE zip >= 4328011 AND zip <= 4328066 ;
Win!
19. 効果測定3 hash &完全一致検索
データベースシステム論 第 回2016 [ 12 ] 19p.
QUERY PLAN
------------------------------------------------------------
Seq Scan on zipcode (cost=0.00..3566.79 rows=2 width=100)
Filter: ((addr3)::text = '城北'::text)
(2 行)
QUERY PLAN
------------------------------------------------------------
Bitmap Heap Scan on zipcode2 (cost=4.02..11.85 rows=2 width=100)
Recheck Cond: ((addr3)::text = '城北'::text)
-> Bitmap Index Scan on idx_zipcode2_addr3 (cost=0.00..4.01 rows=2
width=0)
Index Cond: ((addr3)::text = '城北'::text)
(4 行)
3566.79 11.85vs無し 有り
EXPLAIN SELECT * FROM zipcode WHERE addr3 = '城北';
EXPLAIN SELECT * FROM zipcode2 WHERE addr3 = '城北';
Win!
20. 効果測定4 hash &部分一致検索
データベースシステム論 第 回2016 [ 12 ] 20p.
QUERY PLAN
------------------------------------------------------------
Seq Scan on zipcode (cost=0.00..3566.79 rows=2317 width=100)
Filter: ((addr3)::text ~~ '%城%'::text)
(2 行)
QUERY PLAN
------------------------------------------------------------
Seq Scan on zipcode (cost=0.00..3566.79 rows=2317 width=100)
Filter: ((addr3)::text ~~ '%城%'::text)
(2 行)
3566.79 3566.79vs無し 有り
※等価(完全一致)検索以外ではhashインデクスは働かない
EXPLAIN SELECT * FROM zipcode WHERE addr3 LIKE '%城%';
EXPLAIN SELECT * FROM zipcode2 WHERE addr3 LIKE '%城%';
引き分け!