【PostgreSQL】インデックスの効果
スポンサーリンク
前回までに70万件くらいを書き込んだテーブルを作ったのでちょっとした高速化を試してみます。
準備
インデックス付与
まずはテーブルにインデックスを付与します。
次のSQLでTestTableという名前のテーブルの列Timeに対してインデックスを付与します。
インデックスSQLサンプル
CREATE INDEX ON public."TestTable" ("Time")
インデックス付与確認
付与できていればpgAdminのツリーのindexesが増えているかと思います。
検証
検証用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の設定見直しは多少ですが効果ありですね!