ででりんブログ

写真やプログラミングを中心とした雑記帳

スポンサーリンク

【PostgreSQL】インデックスの効果

スポンサーリンク

前回までに70万件くらいを書き込んだテーブルを作ったのでちょっとした高速化を試してみます。

準備

インデックス付与

まずはテーブルにインデックスを付与します。
次のSQLでTestTableという名前のテーブルの列Timeに対してインデックスを付与します。

インデックスSQLサンプル
CREATE INDEX ON public."TestTable" ("Time")
インデックス付与確認

付与できていればpgAdminのツリーのindexesが増えているかと思います。

f:id:dederin-photo:20210727173245j:plain
インデックス付与

検証

検証用SQL

速度比較のため、実行速度に時間がかかるSQLを作成します。
前回作ったテーブル構成(列「Count」、「Time」が存在するテーブル)に10万件のデータがINSERTされている状態としています。
そのテーブルに下記SQLを実行してみます。
TestTableという名前の同じテーブルをa,bとみなして結合した合計件数を取得するだけのSQLです。
実行結果は100億件を返してくれます。

検証用SQLサンプル
SELECT Count(*) FROM "TestTable" a , "TestTable" b;

結果

条件 SQL実行速度
インデックスなし
PostgreSQLデフォルト設定
5分27秒10
インデックスあり
PostgreSQLデフォルト設定
5分26秒98
インデックスなし
PostgreSQLの設定見直し
・「shared_buffers」2GB(メモリの25%)
4分57秒99
インデックスあり
PostgreSQLの設定見直し
・「shared_buffers」2GB(メモリの25%)
4分35秒17
インデックスなし
PostgreSQLの設定見直し
・「shared_buffers」2GB(メモリの25%)
・「work_mem」16MB
4分40秒26
インデックスあり
PostgreSQLの設定見直し
・「shared_buffers」2GB(メモリの25%)
・「work_mem」16MB
4分41秒98

まとめ

結果としては予想していたよりは高速化にならず・・・
単純結合するSQLだったのでインデックスが効いていないのかもしれないです。
PostgreSQLの設定見直しは多少ですが効果ありですね!

スポンサーリンク