■ はじめに
PostgreSQL で インデックス (index) を使う必要が出てきたので メモっておく。
目次
【1】インデックス 【2】構文 【3】インデックスの種類
【1】インデックス
* 以下を参照。
インデックス ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2010/04/01/175501
【2】構文
CREATE INDEX [index_name] ON [table_name] (item_name); -- 複数インデックスの場合 CREATE INDEX [index_name] ON [table_name] (item_name1, item_name2, ...);
https://www.postgresql.jp/document/10.0/html/sql-createindex.html
【3】インデックスの種類
1)B-tree 2)Hash 3)GiST 4)SP-GiST 5)GIN 6)BRIN
https://www.postgresql.jp/document/10.0/html/indexes-types.html
1)B-tree
* デフォルト
2)Hash
* Hash値による検索 * Ver9.6以前は、WAL(トランザクションログ)に未対応だったため、非推奨 * Ver10.0以降は、WAL対応
使用基準メモ
* = 演算子による検索時に効果的(uuidなどのユニークIDなど) (大小比較 (<,><=,>, >=)や不一致 (!=, <>)は、不向き)
https://www.intellilink.co.jp/article/column/oss-postgres02.html
3)GiST
* Generalized Search Tree(GiST、汎用検索ツリー)
使用基準メモ
* 地理情報向け * 全文検索向け
4)SP-GiST
* Space-Partitioned GiST(SP-GiST、空間分割GiST)
https://www.postgresql.jp/document/10.0/html/spgist-intro.html
使用基準メモ
* 地理情報向け
5)GIN
* Generalized Inverted Indexes(GIN、汎用転置インデックス)
使用基準メモ
* 全文検索向け
6)BRIN
* Block Range INdex(ブロックレンジインデックス) * データをブロックとして1つのグループとし、 それら各グループの値の範囲(最小値と最大値)を保持することにより 検索時の走査範囲を絞り込むことができる => 明らかにマッチする行が存在しないことが判断でき 読み飛ばすことにより、検索時間を短縮できる
https://www.postgresql.jp/document/10.0/html/brin-intro.html
https://www.sraoss.co.jp/PostgreSQL/Manual/document/11/brin-intro.html
使用基準メモ
* 巨大なデータほど高い効果が得られる
構文
CREATE INDEX インデックス名 ON テーブル名 USING brin(カラム名);
参考文献
https://thinkit.co.jp/article/9678
関連記事
PostgreSQL ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2014/03/08/000100
インデックス ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2010/04/01/175501
MySQLのインデックスあれこれ
https://dk521123.hatenablog.com/entry/2018/03/20/220724
SQL アンチパターン ~ 目次 ~
https://dk521123.hatenablog.com/entry/2016/07/02/212547