0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

postgreSQL インデックスを使ったらどうなる?

Posted at

やりたいこと

インデックスを使うと、どうなるのか実験をします。
前の記事で、インデックスをつかわない場合を記事にしたため、差を見てみます。

前提

・postgreSQL1000万件のデータをinsertしたテーブルを使います
・データベースはAWS RDS PostgreSQLを使います。
 (インスタンスタイプはt3.micro)
・PostgreSQL 13
インデックスを作ります!!
 (pgAdmin 4でインデックス作ったら1分以上かかりました)

以前の記事
 postgreSQLで1000万件データをいれてみる
 https://qiita.com/Tarou2000/items/40bffbb4fbb5c466740b

実験する内容

(1).以下のように1000万件から1つのデータを取得

SQL
select * from test
where id = 'ffff73bc-f31b-433d-b57d-54b88a814c5b'

(2) (1)を100回selectしてみます。

結論

(1)について
 SQLの完了まで0.066ms。
 やはり早い。

(2)について
 連続でSQLを実行してもCPU使用率はかわらず

(1) select 1回の処理時間

・実行時間はこちら
 Excution Time: 0.066ms
・Index Condなので、インデックスを使ってます
 データにアクセスせずデータの場所を見つけ出してます。
スクリーンショット 2021-12-07 0.35.35.png

(2)のselectを100回実行したときのCPU

100回順番に実行。プログラムを実行開始して終わるまでに1秒前後かかりました。
CPU負荷は変化なし。
スクリーンショット 2021-12-07 5.08.56.png

インデックスとは

本の索引ページと同じですね
本文がデータで、索引ページがインデックス。
例えばこのデータは、60ページにあると書いてあるので、それを参照してデータを取得する感じです。
ただ、ディスク容量とのトレードオフではあります。

1000万件のデータで、
データが、805MB
インデックスが563MB
インデックスでかい!
が使うしかない。

スクリーンショット 2021-12-07 0.45.48.png

結果

というわけでインデックスを使いましょう。

次はさらなる高速化を目指して、パーティーション化を行います

参考

PostgreSQL - テーブルとindexのサイズを確認する
https://blog.y-yuki.net/entry/2017/07/22/000000

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?